過去数日間、私はOpenGLを使用して描画されたオブジェクトの単純な衝突検出を実装しようとしてきました。私の助けを借りて、Pearson, Computer Graphics with OpenGL
私は次の関数を書くことができました:
void move(){
if(check_collision(sprite,platform1) || check_collision(sprite,platform2)){ //if colliding...
if (downKeyPressed ){ y_Vel += speed; downKeyPressed = false;} //going down
else if(upKeyPressed ){ y_Vel -= speed; upKeyPressed = false;} //going up
else if(rightKeyPressed){ x_Vel -= speed; rightKeyPressed = false;} //going right
else if(leftKeyPressed ){ x_Vel += speed; leftKeyPressed = false;} //going left
} // always glitches on whatever is last else if above?!?!
else{ glTranslatef(sprite.x+x_Vel, sprite.y+y_Vel, 0.0); }
}
スプライトはキーボード入力(矢印キー)に従って移動します。静止している物体と衝突すると、移動を停止し、その位置に留まります。
これまでのところ、静止オブジェクトの上部、左側、下部と衝突するときに機能します。残念ながら(同じロジックを使用していますが)右側は機能せず、衝突するとスプライトは元のx/y座標で再描画されます。私は困惑しています。
move()
結局のところ、関数の最後のチェック(最後else-if
)が機能しないものです...と交換しましたleft
が、最後のチェックと再生されるのはright
いつですか?left
上 :(
これを改善してグリッチを防ぐ方法についてのアドバイスやアイデアはありますか?
私の素朴でアマチュアのコーディングを許してください。私は独学の始まりにすぎません。ありがとう。