我一直在试图弄清楚如何阻止我的敌人在过去的一周中互相重叠。我正在使用一个敌人的链表。我遍历列表并设置一个oldX
和oldY
的位置,这是我希望僵尸如果重叠的位置。我的问题是,一开始碰撞检测工作,但最终他们最终都会粘在一起,而不是移动,下面的图像显示他们最终进入的状态。他们只是粘在一起,不动。如果任何人都可以帮助我解决这个问题,或者解释如何管理这种碰撞检测,那将是非常棒的,因为我找不到任何明确解释它是如何完成的!如何阻止敌人重叠java
这是我移动的僵尸基本AI方法,它测试,看看是否有是有墙无碰撞,然后检查是否是僵尸与其他任何重叠。然后根据玩家的位置移动僵尸。
public void moveZombie(){
for(Zombie zombie : c.z)
{
oldX = zombie.getX();
oldY = zombie.getY();
if(player.getX() > zombie.getX()){
if(wallCollision(zombie.getX()+1, zombie.getY()) == false){
if(zombiesCollision(zombie) == false){
zombie.setX(zombie.getX() + 1);
}
}
}
if(player.getX() < zombie.getX()){
if(wallCollision(zombie.getX()-1, zombie.getY()) == false){
if(zombiesCollision(zombie) == false){
zombie.setX(zombie.getX() - 1);
}
}
}
if(player.getY() > zombie.getY()){
if(wallCollision(zombie.getX(), zombie.getY()+1) == false){
if(zombiesCollision(zombie) == false){
zombie.setY(zombie.getY() + 1);
}
}
}
if(player.getY() < zombie.getY()){
if(wallCollision(zombie.getX(), zombie.getY()-1) == false){
if(zombiesCollision(zombie) == false){
zombie.setY(zombie.getY() - 1);
}
}
}
}
}
这是我的布尔方法,它测试僵尸是否碰撞。它从我上面的move()
方法中调用,并将上面循环中的当前僵尸作为参数。然后它检查它们是否相交。如果他们将僵尸的x和y位置设置为oldX
和oldY
的位置并返回true。如果有交点,我尝试zombie.x -= 32;
和zombie.y -=32
。这种方法很有效,但它非常糟糕,而且它们经常卡在墙上,我想知道如何将僵尸移回原来的位置。
public boolean zombiesCollision(Zombie zombie){
for(Zombie zombie2 : c.z){
if(zombie != zombie2){
if(zombie2.getZombieBounds().intersects(zombie.getZombieBounds())){
zombie.x = oldX;
zombie.y = oldY;
return true;
}
}
}
return false;
}
你的“世界”是否有界限,还是一个开放的世界?例如,你的世界是否像10x10? – RayfenWindspear
这是一张70x40的瓷砖地图。每个瓦片是32x32像素。 – Phill