回答:
まあ、最も単純な意味では、このようなものがあります。
y |\
| \
m | \ s
o | \ p
v |(a) \ e
(y)e |angle\ e
m | \ d
e | \
n | \
t | \
|__________\
x movement
(x)
速度は敵の速さですが、敵のx方向への移動量とy方向への移動量は、角度のsinまたはcosを取り、速度を乗算することで決定できます。なぜなら...
sin(a) = x / speed
そう:
x = speed * sin(a)
そして:
cos(a) = y / speed
そう:
y = speed * cos(a)
あなたの例でmoveForward(90)
生じるであろうspeed * sin(90)
か、speed * 1
x方向およびspeed * cos(90)
または0
Y方向に(あなたが指定したように、それは右に移動する必要があります)。基本的な意味であなたはそれを始めるはずです。
一般的にする:
moveForward(float angle)
{
x += speed * sin(angle);
y += speed * cos(angle);
}
他の答えは今のところ間違っています。回転に基づいて平面に沿って正しく移動するには、次のようにします。
posX += Math.cos(rotation) * forwardSpeed + Math.sin(rotation) * strafeSpeed;
posY -= -Math.cos(rotation) * strafeSpeed + Math.sin(rotation) * forwardSpeed;
ただし、回転が変化したときにのみ更新するcos / sinの変数を作成して、ティックを4倍計算しないようにすることをお勧めします。
strafeSpeedは左右に移動し、forwardSpeedは回転に沿って前方に移動します。
編集:テッセローデは、左右の動きがないことを除いて同じことをします。