0

OpenGL を使用して C++ でプログラムを実行しています。

私のゲームには船と敵船があります。

現時点では、キーボードに満足しているので、船を動かすことができます。

しかし、敵の船に何らかの動きを与えたいと思っています。たとえば、それらは特定の座標x、yにあり、特定の時間内に5ステップ右、5ステップ左に繰り返し移動するメソッドが必要です。

何か案は?

4

3 に答える 3

2

最初のパラメータvoid glutTimerFunc(unsigned int msecs,void (*func)(int value), value); はミリ秒単位の時間で、2 番目のパラメータは敵船の座標を更新する関数です。ここで見つけることができる詳細な説明。使い方は以下からご覧いただけます。

void update(int value) {
//do your logic to change the cordinate of the enemy ships
glutPostRedisplay();
glutTimerFunc(25, update, 0);
}

敵船の座標を変更するロジックを入れた関数名の更新です。その中には、時間が 25 ミリ秒の glutTimerFunc がありました。これは、25 ミリ秒ごとに関数 update が呼び出され、ロジックに従って敵船の座標が変化することを意味します。メイン関数で glutTimerFunc を呼び出す必要があります。

int main(int argc,char** argv)
{
 //your program code
  glutTimerFunc(25, update, 0);
}
于 2013-03-06T12:03:22.610 に答える
0

船をδt秒 (t 0 から開始) でAからB移動するには、各フレームの A + ( B - A )( t - t 0 )/ δt ( tは現在の時間) で船を描くだけです。 t = t 0 + δt .

これにより直線運動が誘発されることに注意してください。動きの開始時と終了時に速度を上げたり下げたりしたい場合、それはより複雑です。物理にとらわれずに滑らかにするには、Smoothstep関数を使用して、( t - t 0 )/ δtを Smoothstep( t 0 , t 0 + δt , t ) に置き換えます。

于 2013-03-06T11:57:31.607 に答える
0

これは速度と呼ばれ、ユーザーの入力によって速度が変化します。

位置があり、一定時間後にX速度(x の速度) がある場合、次の方法で新しい位置を取得します。vxtX'X'=X+vx*t

次のようなものを呼び出すだけです

void update()
{
    myObject.X += myObject.vx*t;
}
void leftArrow()
{
    const float increment = 0.05f;
    const float maxSpeed = 0.50f;
    if (myObject.vx >= maxSpeed)
    {
        myObject.vx -=increment;
    }
}

どのように選択しますtか?あなたが説明する滑らかな動きの場合、事実上、どんな小さな値でtも機能します。衝突などのより複雑な動きを計画している場合は、統合している機能の安定性を評価する必要があります...(ただし、それはあなたが説明したことをはるかに超えています.)

于 2013-03-06T11:56:23.747 に答える