两个物体之间的碰撞停止

时间:2017-05-25 12:25:16

标签: java collision-detection

下面是我的代码,可以检测两个对象之间的冲突,每当我的玩家与墙碰撞时设置booleantrue

private boolean collide(){
    for(int i = 0; i < handler.object.size(); i++){
        if(this.getBounds().intersects(handler.object.get(i).getBounds()) && handler.object.get(i).getId() != ID.Player && handler.object.get(i).getId().equals(ID.Wall)){
            System.out.println("COLLIDEEEEE");
            return true;
        }
    }
    return false;
}

我的目的是让玩家在碰撞时停止移动。 现在我的玩家运动代码看起来像这样:

public void tick() {
    if (Var.A == true && Var.ableToMove == true) {
        Var.OffsetX += Var.speed;

    }
    if (Var.D == true && Var.ableToMove == true) {
        Var.OffsetX -= Var.speed;

    }

我现在要做的是,我希望玩家在撞墙时停下来。 如果你们中的任何人能帮助我,我将非常感激。

1 个答案:

答案 0 :(得分:1)

if(this.getBounds().intersects(handler.object.get(i).getBounds()) 

似乎可以检测到此(玩家)与其他元素之间的碰撞。

但这看起来不太好:

handler.object.get(i).getId() != ID.Player && handler.object.get(i).getId().equals(ID.Wall)){

1)不一致。
第一个比较比较了id对象的引用:

handler.object.get(i).getId() != ID.Player 

第二个根据equals()方法比较id对象:

handler.object.get(i).getId().equals(ID.Wall))

在两种情况下都应该使用相同的方法。 您没有指定是否对id使用String,但String应与equals()进行比较。

2)你不需要进行两次比较。

假设ID.Player和ID.Wall是两个不同的值,如果handler.object.get(i).getId().equals(ID.Player)为真,则表示 handler.object.get(i).getId().equals(ID.Wall)是假的。

handler.object.get(i).getId().equals(ID.Wall)应该足够了。