1

を使用して、2Dの正方形を左、右の順にスムーズに動かそうとしていglTranslateます。

次のコードを使用して、OpenGLを使用して正方形を描画します。

    void drawEnemy (RECT rect){
    glPushMatrix();

    //move enemy left then right
    glTranslatef(+right, 0.0, 0.0); //animate right
    glTranslatef(-left, 0.0, 0.0); //animate left

    glBegin(GL_QUADS);
    glColor3f(238, 0.0, 0.0);
        glVertex3f(rect.x, rect.y, 0.0);
    glColor3f(128, 0.0, 128);
        glVertex3f(rect.x, rect.y+rect.h, 0.0);
    glColor3f(238, 0.0, 0.0);
        glVertex3f(rect.x+rect.w, rect.y+rect.h, 0.0);
    glColor3f(128, 0.0, 128);
        glVertex3f(rect.x+rect.w, rect.y, 0.0);
        glEnd();
    glPopMatrix();
    }

次のコードを使用して、反対方向に戻る前に、カバーするx軸に沿った長さを制御しようとしています。

    void timer(int t)
    {   
    right +=0.5f;
    if(right>=platform1.x+platform1.w)
        right-=0.5f;

    left+=0.5f;
    if(left<=platform1.x)
        left-=0.5f;

    glutPostRedisplay();
    glutTimerFunc(25,timer,0);
    }

Openglは単なるグラフィックパッケージであり、必ずしもアニメーション自体に使用されるわけではないことは承知していますが、自己学習の目的で、これをできるだけ簡単に実現したいと考えています。

現在、プログラムは正方形を永遠に正しく動かします。

4

2 に答える 2

3

なぜあなたは自分の動きを2つの(leftright)の組み合わせとして表現しているのですか?それは非常に複雑に思えます。

単一のposX変数を使用し、キーの押下に応じて変数を増減します。

于 2013-03-21T13:19:21.820 に答える
2

次のコード行を見てください。

if(left<=platform1.x)
    left-=0.5f;

とはどうleft = 0なりplatform1.x = 1ますか?

編集:

次のように、現在の位置と移動している方向の両方を追跡することが必要なようです。

double dir = 1;
double x = platform1.x;

void timer(int t) { 
   x += dir;
   if(x < platform1.x || x > platform1.x + platform1.w) {
      dir = -dir;
      x += dir;
   }
   ...
}

void drawEnemy(RECT rect) {
   ...
   glTranslatef(x, 0.0, 0.0);
   ...
}
于 2013-03-21T13:19:46.510 に答える