在我的2D马里奥式游戏中,我一直坚持关于碰撞的错误。
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()来设置机器人方向的位置。
这是我的问题:如果我的机器人在一个角落,在底部碰撞和右碰撞的地方,我向右移动,我的机器人移动到右边的瓷砖,触发底部碰撞,并且螺钉一切都好了。
切换底部/顶部和底部的位置右/左碰撞没有帮助,因为同样的问题发生,机器人落入地面,触发右/左碰撞。
基本上,我需要一种方法同时运行所有四个。 感谢
答案 0 :(得分:0)
您正在尝试一次构建一个检查。为什么不喜欢
if(!Rect.intersects(robot.rect1) && !Rect.intersects(robot.rect2) && !Rect.intersects(robot.rect3) && !Rect.intersects(robot.rect4)
{
//act normally
} else {
//collieion
}
您现在正在做的是检查一方,并将结果基于此。
答案 1 :(得分:0)
是的我也遇到了麻烦,你缺少的是调用updateRect();在X轴上进行碰撞检测后再次。 我建议先检查X轴。 这是一篇关于基于图块的碰撞的好文章: http://higherorderfun.com/blog/2012/05/20/the-guide-to-implementing-2d-platformers/