2016-11-20 3 views
-1

SDLライブラリを使用してC++でキャバールを作成しています。カバールは、プレーヤーが画面の下に座ってx方向にのみ移動できるゲームです。敵が前に現れてミサイルを撃ちます。ゲームはこのようなビットです。C++ SDLゲームのロケット曲率

In game Picture

私はロケットが緑色で示した軌道を取りたいです。曲がった軌道。しかし、それは赤で示されている軌道を取ります。プレーヤーが動いているので、弾道が固定されていないことに注意してください。

私がこれまで実施してきたコード

はこれです:PlayerXはプレイヤーのX座標であり、Xは、ロケットのX座標である

void Missiles::Move(int playerX) 
{ 

    angle =atan(playerX - X); 

    X=X + sin(angle)*2; 

} 

。私は一定の速度で変化するようにY座標を作りました、従って私はコードにそれらを示していません。

+0

垂直方向と水平方向のコンポーネントで構成されて?問題(したがって答え)は全く同じではなく、あなたの質問はそれについてはかなり不明です。 – Zouch

+0

また、ミサイルがいつでもプレイヤーを指差しているか、それに向かうのに何らかの遅れがあるかどうかを確認する必要があります。 – Zouch

答えて

0

角度を目指して取得するには、別の問題のアカウントに

angle = atan2(PlayerY - RocketY, PlayerX - RocketX); 

をY座標の違いを取ることが必要である - ロケット速度現実にし、物理学に限られています。ロケットは、初期速度を持ち、そしてちょうど落ちるか、それをより求めてミサイルのようにする必要がありますべきそれは

Vx = V * Cos(angle) 
Vy = V * Sin(angle) 
+0

ロケットが上記の敵によって発射されたことを忘れていて、 。プレイヤーはx軸方向にのみ移動できます。あなたの公式では、ロケットがプレイヤーの動きに追従しているようには見えませんか? –

+0

はい、私は敵を目指すことを考えました。 EnemyY、XをPlayerY.Xに置き換えます。ロケットの初期状態はどうですか? – MBo