【发布时间】:2011-04-21 09:54:27
【问题描述】:
我在编写的一个小型 2D 游戏中遇到了一些碰撞问题。我目前正在开发一个函数,我想查找玩家角色是否与块碰撞,以及他与块的哪一侧发生碰撞。
目前我有类似(伪代码):
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 碰撞有效,但它在应该识别侧面碰撞时无法识别,有时它在不应该识别时识别。
该游戏是 SuperMario 克隆,因此它是一款横向卷轴 2D 平台游戏。
【问题讨论】:
-
如果你能提供真实的代码,你的问题会更容易回答。请做。编辑:我认为 PLAYER_BOX_RIGHT_SIDE 与玩家的 x 坐标(玩家 x + 精灵宽度)正确偏移?
-
是的,所有偏移都得到了正确处理。
标签: c++ 2d bounding-box