在我的2D类马里奥游戏中,我被一个关于碰撞的bug卡住了。
public void collision() {
if (Rect.intersects(Robot.rect2, r)){
robot.setSpeedY(0);
robot.setCenterY(tileY - 32);
robot.setJumped(false);
} else if (Rect.intersects(Robot.rect, r)){
robot.setSpeedY(0);
robot.setCenterY(tileY + 32);
}
updateRect();
if (Rect.intersects(Robot.rect3, r)){
robot.setCenterX(tileX + 32);
robot.setSpeedX(0);
} else if (Rect.intersects(Robot.rect4, r)){
robot.setCenterX(tileX - 32);
robot.setSpeedX(0);
}
}
我的游戏中的碰撞是通过比较矩形来检查的。我的机器人的矩形: rect (底部碰撞,所以在我的机器人精灵的下半部分是矩形),rect2 (顶部碰撞),rect3 (左碰撞)和rect4 (右碰撞)。
我的游戏中的每个瓦片都以一个实例化的矩形r为边界。当我的机器人的矩形和瓦片的矩形相交时,我调用collision(),它设置了我的机器人的方向。
这就是我的问题:如果我的机器人在一个角落里,它处于底部碰撞和右侧碰撞,我向右移动,我的机器人移动到右边的瓷砖中,这就触发了底部碰撞,把一切都搞砸了。
切换底部/顶部和右侧/左侧碰撞的位置没有任何帮助,因为同样的问题也会发生,机器人落入地面,触发右侧/左侧碰撞。
从本质上讲,我需要一种同时运行这四种方法的方法。谢谢
发布于 2013-11-06 16:38:42
Yku正在尝试构建它,一次一个检查。为什么不像这样
if(!Rect.intersects(robot.rect1) && !Rect.intersects(robot.rect2) && !Rect.intersects(robot.rect3) && !Rect.intersects(robot.rect4)
{
//act normally
} else {
//collieion
}
你现在所做的就是检查一个方面,并在此基础上得出你的结果。
发布于 2014-02-21 09:53:50
是的,我在这方面也遇到了问题,在X轴上进行碰撞检测之后,您缺少的是调用updateRect();。我建议先检查X轴。这里有一篇关于基于瓦片的碰撞的很好的文章:http://higherorderfun.com/blog/2012/05/20/the-guide-to-implementing-2d-platformers/
https://stackoverflow.com/questions/19805679
复制相似问题