1

スプライトが別の形状に衝突すると、スプライトが消えて元のx / y位置に再描画されますが、理由がわかりません。

スプライトが消えるのを止め、代わりに最初の衝突前の場所にとどまるようにコードを変更することを誰かが提案できますか?

を逆にして、関数glTranslationの値をに設定して移動を停止しようとしましたが、失敗しました。0move()

void move(){

    if(check_collision(sprite,platform1) || check_collision(sprite,platform2)){ //if colliding
        //x_Vel = 0; y_Vel = 0;
    }
    else{ //if not colliding
        glTranslatef(x_Vel, y_Vel, 0.0);
    }
}

void drawSprite (RECT rect) { ... }
4

1 に答える 1

0

ここでは、変数名の選択に助けられない可能性がありますが、少し結び目があります。

x_Vely_Vel速度ではなく、実際には位置であるように見えます。これらをフィードするglTranslate()と、その翻訳が現在の変換に追加されるだけです。あなたの場合、それはあなたのオブジェクトが画面上のどこに描かれるかを変えるだけです。オブジェクトが衝突した場合、翻訳はまったく行われないため、もちろん、物事は別の場所に描画されます。

明らかに、位置をゼロに設定することも機能せず、否定もしません。

あなたがする必要があるのは、放っておいてglTranslate()、代わりにオブジェクトが衝突したときに特定の方向への移動を許可しないことです。これは、位置を更新するときに発生するはずです。表示関数内の衝突を処理しようとしていますが、これは機能しません。この時点ですでにオブジェクトを移動しているため、GLは役に立ちません。

したがって、そもそもOpenGLこのように使用することをお勧めします(この機能は非推奨であり、非効率的です)が、使用する場合glTranslate()などは、描画方法を制御するだけであることに注意してください。動きを処理しません。それはあなたの責任です。

于 2013-03-20T17:30:15.563 に答える