我一直在試圖弄清楚如何阻止我的敵人在過去的一週中互相重疊。我正在使用一個敵人的鏈表。我遍歷列表並設置一個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