我在编写的小型 2D 游戏中遇到一些碰撞问题。我目前正在研究一个函数,我想找出玩家角色是否与方 block 发生碰撞,以及他与方 block 的哪一侧相撞。
目前我有类似(伪代码)的东西:
if(PLAYER_BOX IS WITHIN THE BLOCKS Y_RANGE)
{
if(PLAYER_BOX_RIGHT_SIDE >= BLOCK_LEFT_SIDE && PLAYER_BOX_RIGHT_SIDE <= BLOCK_RIGHT_SIDE)
{
return LEFT;
}
else if(PLAYER_LEFT_SIDE <= BLOCK_RIGHT_SIDE && PLAYER_LEFT_SIDE >= BLOCK_LEFT_SIDE)
{
return RIGHT;
}
}
else if(PLAYER_BOX IS WITHIN BLOCK X_RANGE)
{
if(PLAYER_BOTTOM_SIDE >= BLOCK_TOP_SIDE && PLAYER_BOTTOM_SIDE <= BLOCK_BOTTOM_SIDE)
{
return ABOVE;
}
else if(PLAYER_TOP_SIDE <= BLOCK_BOTTOM_SIDE && PLAYER_TOP_SIDE >= BLOCK_TOP_SIDE)
{
return BELOW;
}
}
我这里有逻辑错误吗?或者我只是在我的代码中写错了什么?
ABOVE 碰撞有效,但它无法识别应该识别的侧向碰撞,有时它会识别不应该识别的碰撞。
该游戏是《 super 马里奥》的克隆版,因此它是一款横版 2D 平台游戏。
最佳答案
我猜问题是方向。
您真正想要做的是首先考虑“玩家”方向,然后进行检查。
如果您不知道玩家向哪个方向移动,您可能会根据 Sprite 移动的“速度”获得一个错误命中数。
例如,如果您有移动方向(从左到右),那么您的代码可能如下所示:
select movedir
(
case up:
//check if hitting bottom of box
break;
case down:
//check if hitting top of box
etc
}
关于c++ - 二维边界框碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3865737/