編集:私はデッカーのリンク(ベクトル移動デモ)で非常によく文書化されたソースコードを掘り下げました、そして私はこれがそこにあるコードのいくつかからうまくいくことを理解できるとかなり確信しています。助けてくれてありがとう:D
私はjavascriptでゲームの動きに取り組んでいます。左右の矢印キーで宇宙船の画像を回転させ、上矢印キーで宇宙船を加速させます。回転の度合いと速度を使って、x
との動きを計算することができますが、これは船が車のように扱うことを意味します。宇宙にあるはずなので、船の回転は加速中の進路にのみ影響を与え、船の現在の動きを考慮に入れたいと思います。y
Math.sin()
Math.cos()
私はそれを何度もいじり、動きを現在の方向と速度、そして望ましい方向の2つの別々の力に分割しようとしましたが、それがどのように感じられるべきかについてさえ何も近くないようです。
紛らわしい場合は申し訳ありませんが、元のムーブメントの簡略化されたコードは次のとおりです。
function main()
{
if(keyStates[39]) // Right arrow pressed?
ship.deg+=8;
if(keyStates[37]) // Left arrow pressed?
ship.deg-=8;
if(keyStates[38]) // Up arrow pressed?
{
if(ship.speed<16)
ship.speed+=1;
}
var shift=getXYshift(ship.deg,ship.speed);
function getXYshift(deg,speed)
{
return {x:Math.round(Math.cos((90-deg)*Math.PI/180)*speed*-1), y:Math.round(Math.sin((90-deg)*Math.PI/180)*speed)};
}
setTimeout(function(){ main() }, 50);
}