gpt4 book ai didi

c++ - 碰撞检测有效但有小故障?

转载 作者:太空狗 更新时间:2023-10-29 23:17:59 24 4
gpt4 key购买 nike

我编写了一个小程序,在实现时会停止一个小正方形穿过一个较大的矩形。

collision() 函数被调用时,它会检查形状是否发生碰撞。目前它执行以下操作:

  • 当正方形向形状向上移动时,它不会通过。(就像它应该的那样)
  • 当正方形向下 向形状移动时,它不会通过。(就像它应该的那样)
  • 当向形状移动时,它不会通过。 (但它向上移动了一个键按)
  • 当向形状 移动时,它不会通过。 (但是一键左移,一键上移)(见图)

glitch

这是我的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

我希望leftright 碰撞与updown 碰撞一样工作。我的代码对每个方向使用相同的逻辑,所以我不明白为什么要这样做......

最佳答案

我认为您应该首先检查 Sprite 的角是否发生碰撞。然后,如果您的平台比您的 sprite 厚,则不需要进一步检查。否则检查你的 Sprite 的每一面是否与平台发生碰撞。

if ((plat_Bottom <= sprite_Bottom + y_Vel && sprite_Bottom  + y_Vel <= plat_Top)
&& (plat_Left <= sprite_Left + x_Vel && sprite_Left + x_Vel <= plat_Right))
// then the left-bottom corner of the sprite is in the platform
return true;

else if ... // do similar checking for other corners of the sprite.
else if ... // check whether each side of your sprite collides with the platform

return false;

关于c++ - 碰撞检测有效但有小故障?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15617108/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com