Witam, obecnie zajmuję się ruchem statku kosmicznego i mam taki oto problem - statek ma mieć prędkość maksymalną, swoje przyspieszenie, prędkość. Udało mi się zrobić już bardzo dobry kod, ale ma jedną wadę, którą chcę usunąć - otóż, ruch na osiach x i y może zachodzić z jednakową prędkością, więc poruszając się w kierunku rogu ekranu statek osiąga znacznie większą prędkość niż powinien (obecnie jako maksimum ustawiłem 3, ale będzie to zmienna wartość).
Oto, co na ten moment udało mi się zrobić:
ActionListener TimerTick = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
pane.repaint();
pane.add(panel);
if (rotate<0.0) {rotate = 2*Math.PI;}
if (rotate>2*Math.PI) {rotate = 0.0;}
if (rightKeyPressed==true) {rotate=rotate+0.05;}
if (leftKeyPressed==true) {rotate=rotate-0.05;}
xLoc = xLoc - xThrust;
yLoc = yLoc + yThrust;
totalThrust = Math.abs(xThrust)+Math.abs(yThrust);
if (upKeyPressed==true) {
xAccel = (Math.sin(rotate)*0.05);
yAccel = (Math.cos(rotate)*0.05);
xThrust = xThrust-xAccel;
yThrust = yThrust-yAccel;
}
if (downKeyPressed==true) {
if (xThrust<0.05 && xThrust>-0.05) {xThrust=0;}
else if (xThrust<=-0.05) {xThrust=xThrust+0.05;}
else if (xThrust>=0.05) {xThrust=xThrust-0.05;}
if (yThrust<0.05 && yThrust>-0.05) {yThrust=0;}
else if (yThrust<=-0.05) {yThrust=yThrust+0.05;}
else if (yThrust>=0.05) {yThrust=yThrust-0.05;}
}
if (xThrust>3) {xThrust=3;}
if (xThrust<-3) {xThrust=-3;}
if (yThrust>3) {yThrust=3;}
if (yThrust<-3) {yThrust=-3;}
}
};
Da się go zmodyfikować tak, aby maksymalną prędkością dopuszczalną na obu osiach było 3, a w przypadku, w którym statek poruszający się z pełną prędkością zakręca pojazd odpowiednio zmodyfikował swoją prędkość?