不,你犯了一個經典錯誤:Java trig函數需要弧度而不是度數。你不應該超過90歲;它是π /2.0。
所以一定要由π /180.0乘以角度以度轉換爲弧度。
對於C,C++,Java,JavaScript,C#和我所知道的其他所有語言都是如此。我無法命名使用角度的單個語言。
double radians = dir*Math.PI/180.0;
x += (int)(spd*Math.cos(dir));
y -= (int) (spd * Math.sin(dir));` // I don't know why you do this. Funny left-handed coordinate system.
速度是速度矢量的大小。寫成的等式只將速度表示爲(vx,vy)分量。
如果你想位移,你必須通過一個時間步長乘以:
vx = speed*Math.cos(angle);
vy = speed*Math.sin(angle);
dx = vx*dt;
dy = vy*dt;
x += dx; // movement in x-direction after dt time w/ constant velocity
y += dy; // movement in y-direction after dt time w/ constant velocity
如果有涉及(如重力)的加速度,你應該計算一段時間內的速度變化一樣。
噢,那也是!完全錯過了那部分。 – Amadan
我認爲這是問題的真正根源。 – duffymo
好吧我真的不知道如何解釋發生了什麼,但我做到了這一點:dir = dir * Math.PI/2.0;但是,子彈似乎圍繞對方發生的事實真是奇怪。 – mkjrfan