4

私はopenglを使用してC++で簡単なポンゲームを作成しようとしています。画面に境界線が表示され、パドル、ボール、そしてそれらすべてが動くので、それは素晴らしいことです!問題は、1ピクセルの速度でもボールが電光石火の速さで動くことです。

initと呼ばれるコールバック関数でその位置を更新し、次のようにglutIdleFuncに渡します。glutIdleFunc(idle);

アイドル機能は次のとおりです。

void idle(){
    ball.moveLeft();

    glutPostRedisplay();
}

基本的には、1ピクセル左に移動するだけですが、アイドル状態は頻繁に呼び出されるため、非常に速く移動します。このエラーを修正するにはどうすればよいですか?

さらに情報が必要な場合は、質問してください。

4

2 に答える 2

2

GLUT タイマーを使用して、display()16 ミリ秒ごとにコールバックを開始します。

void timer( int extra )
{
    glutPostRedisplay();
    glutTimerFunc( 16, timer, 0 );
}

int main( int argc, char **argv )
{
    glutInit( &argc, argv );
    glutInitDisplayMode( ... );
    glutInitWindowSize( ... );
    glutCreateWindow( ... );
    ...
    glutTimerFunc( 0, timer, 0 );
    ...
    glutMainLoop();
    return 0;
}
于 2013-02-19T03:45:07.813 に答える
2

これは、1秒あたりのフレーム数を表示するために大量の時間を取得する方法について説明しているブログへのリンクです。

http://www.lighthouse3d.com/tutorials/glut-tutorial/frames-per-second/

ボールの速度をピクセル/秒で決定する必要があります。次に、その速度に最後の更新と現在の更新の間に経過した秒数を掛けます。ブログによると、これは glutGet(GLUT_ELAPSED_TIME) で取得できます。それでもうまくいかない場合は、プラットフォームでミリ秒単位の現在の時刻を見つける方法をグーグルで検索してください。

お役に立てれば。

于 2013-02-19T03:49:11.553 に答える