0

在我的 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(右碰撞)。

我游戏中的每个图块都由一个实例化的 Rectangle r 界定。当我的机器人的矩形和瓦片的矩形相交时,我调用了碰撞(),它设置了我的机器人方向的位置。

这是我的问题:如果我的机器人在一个角落,它处于底部碰撞和右侧碰撞中,并且我向右移动,我的机器人移动到右侧的瓷砖中,这会触发底部碰撞,并将所有东西都拧紧。

切换底部/顶部和右/左碰撞的位置并没有帮助,因为从那时起同样的问题发生了,机器人掉入地面,触发了右/左碰撞。

本质上,我需要一种同时运行所有四个的方法。谢谢

4

2 回答 2

0

Yku 正在尝试一次构建一张支票。为什么不喜欢

if(!Rect.intersects(robot.rect1) && !Rect.intersects(robot.rect2) && !Rect.intersects(robot.rect3) && !Rect.intersects(robot.rect4) 
{
    //act normally
} else {
    //collieion
}

您现在正在做的是检查一侧并以此为基础。

于 2013-11-06T08:38:41.523 回答
0

是的,我也遇到了麻烦,您缺少的是调用 updateRect(); 在 X 轴上进行碰撞检测后再次。我建议先检查 X 轴。这是一篇关于基于瓷砖的碰撞的好文章:http: //higherorderfun.com/blog/2012/05/20/the-guide-to-implementing-2d-platformers/

于 2014-02-21T01:53:50.427 回答