プログラミングの質問というよりも数学の質問であるため、これがこのフォーラムで受け入れられる質問であることを願っています。
cocos2d フレームワークを使用して基本的なスペース シューティング ゲームを開発しています。このゲームでは、ユーザーが宇宙船を制御して小惑星/敵を撃ち、敵も宇宙船を撃ち返します (オリジナルのえ?)。
敵が発射する「レーザー」はチューブのような形状で、通常は x 軸上で右から左にしか移動しません。これは簡単に実現でき、動きは次のコード行で作成されます。
currentEnemyProjectile.position = ccp(currentEnemyProjectile.position.x - ((screenSize.width/kLaserSpeed)* dtSixty), currentEnemyProjectile.position.y);
また、画面の中央に存在し、宇宙船で発射物を発射するために回転する特定の敵が 1 つあります。したがって、宇宙船が敵とは異なる y 位置にある場合、発射物スプライトは回転して移動します。宇宙船の位置に移動するため、y 軸も移動する必要があります。
私は現在、これを達成するためにコードを使用しています:
float xDiff = ((screenSize.width/kLaserSpeed)* dtSixty);
float yDiff = (xDiff / 57) * currentEnemyProjectile.rotation;
currentEnemyProjectile.position = ccp(currentEnemyProjectile.position.x - xDiff, currentEnemyProjectile.position.y + yDiff);
私はこれを一時的な修正として解決しましたが、それが最適な方法ではないことはわかっています。それはある程度機能しますが、x 軸に沿った動きから y オフセットを計算していると、y 軸に沿ってさらに移動する必要がある場合、発射体はより速く移動します。理想的には、それらがさらに上または下に移動している場合は、x 軸に沿ってゆっくりと移動する必要があります。これにより、どの軌道でも移動速度が一定になります。(私はそれを十分に説明したことを願っています)
最後に数学のレッスンを受けてから約 10 年が経ちました。そのため、私の幾何学/三角法はかなりぼやけている/存在しません。
また、cocos2d アクションを使用せずにこれを実行したいことにも注意してください。ゲームの一部として時間の流れを操作するために現在行っているように、フレームごとにスプライトを移動したいので、cocos2d アクションが提供できる以上の制御が必要です。
助けてくれてありがとう。