0

キャラクターに振動動作をさせようとしています。つまり、キャラクターは特定の角度 (たとえば 60 度) まで回転することから始め、ゆっくりと直立した位置に戻り、反対方向に 60 度未満 (たとえば 55 度) の角度で回転し、最後まですべてを繰り返します。回転角度がゼロになり、キャラクターが停止します。現在、私はグローバル変数を宣言し、ifブロックでそれらをチェックし、それらのブロックでそれらの値を1度変更して、タイマーがpaintglを呼び出すたびに角度を1度減らし、オブジェクトを描画することでこれを達成しようとしています。ゆっくり回転しているように見えます。キャラを止められなくて困っています。これは、それを処理するコードの一部です。

  glRotatef(j,0,1,0);
glRotatef(k,0,1,0);

if(flag)
{
    j = j + 2;
    if (j == 0)
     {
        k = 60;
        flag = !flag;

    }
}

if(!flag)
{

    k = k - 2;
    if(k == 0)
    {
        j = -60;
        flag = !flag;
    }
}

gluCylinder(player, 1,1,8,100,100);

ここで円柱は私のキャラクターで、if ブロックはグローバル変数 j と k を増減しています。j は -60 に初期化され、k は 60 に初期化されます。

どうすればこれを機能させることができ、どうすれば停止できますか。

4

1 に答える 1

0

浮動小数点変数はkありますか?jその場合、フロートは本質的に不正確であるため、正確な比較は機能しません。違いを取り、それが特定のしきい値を下回っているかどうかをテストする必要があります。

ただし、単純な振動の場合は、時間を正弦関数に固定し、その出力(-1〜1の範囲)を、目的のアニメーション状態にスケーリングおよびオフセットする関数への入力として使用します。

これを行うための普遍的な方法は、アニメーションカーブシステムを実装することです。つまり、入力変数として時間を取り、出力変数としてユーザー、つまりあなたによってパラメータ化された補間値をとる区分的補間関数を構築するために使用されるパラメーターを入力できます。詳細は「アニメーションカーブシステム」で検索してください。

于 2012-12-23T23:30:11.333 に答える