下面是我的代码,可以检测两个对象之间的冲突,每当我的玩家与墙碰撞时设置boolean
到true
:
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;
}
我现在要做的是,我希望玩家在撞墙时停下来。 如果你们中的任何人能帮助我,我将非常感激。
答案 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)
应该足够了。