私は小さなプログラムを書いて、実装すると小さな正方形が大きな長方形を通過するのを止めました。
関数が呼び出されると、collision()
形状が衝突しているかどうかがチェックされます。現在、次のことを行っています。
- 四角が
up
形に向かって動いているときは通り抜けません。(そうあるべきように) - 正方形が動いているときは
down
、形に向かって、通り抜けません。(そうあるべきように) - 移動時
right
、形状の方は通り抜けません。(ただし、キーを 1 回押すと上に移動します) - 移動時
left
、形状の方は通り抜けません。(ただし、キーを 1 回押すと左に移動し、キーを 1 回押すと上に移動します) (写真を参照)
これが私のcollision()
機能です:
if (sprite_Bottom +y_Vel <= plat_Top ){return false;}
else if(sprite_Top +y_Vel >= plat_Bottom ){return false;}
else if(sprite_Right +x_Vel <= plat_Left ){return false;}
else if(sprite_Left +x_Vel >= plat_Right ){return false;}
//If any sides from A aren't touching B
return true;
これが私の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
}
glTranslatef(sprite.x+x_Vel, sprite.y+y_Vel, 0.0); //moves by translating sqaure
と の衝突がleft
とright
と同じように機能するようにup
しdown
ます。私のコードは各方向に同じロジックを使用しているため、なぜこれを行うのかわかりません...