2014-02-25 31 views
0

我目前正在用java編寫一些簡單的蛇遊戲。蛇的物體有一個裝滿身體部分的陣列。這些bodyparts都包含一個矩形。用自己的蛇碰撞檢測

蛇的更新方法是這樣的:

public void update() { 
    if(isMoving) { 
     if(System.currentTimeMillis() - moveTimer > moveSpeed) { 
      if(parts.get(0).getX()+dx*size >= 0+GameView.GRID_PADDING_LEFT && parts.get(0).getY()+dy*size >= 0+GameView.GRID_PADDING_TOP && parts.get(0).getX()+dx*size <= ((GameView.GRID_WIDTH-1)*size)+GameView.GRID_PADDING_LEFT && parts.get(0).getY()+dy*size <= ((GameView.GRID_HEIGHT-1)*size)+GameView.GRID_PADDING_TOP) { 
       for(int i = parts.size()-1; i > 0; i--) { 
        parts.get(i).setLocation((int)(parts.get(i-1).getX()), (int)(parts.get(i-1).getY())); 
       } 
       parts.get(0).setLocation(parts.get(0).getRect().left+dx*size, parts.get(0).getRect().top+dy*size); 
       moveTimer = System.currentTimeMillis(); 
      }else { 
       die(); 
      } 
     } 
    } 
} 

於一身,蛇移動它的頭部成DX方向倍一個cellspace(大小) - > DX *尺寸和dy *的大小。 然後身體的其他部分移動,頭部後面的部分獲得頭部的座標,該部分後面的部分從他面前的部分獲得coodrinates等

現在我試圖實現一些碰撞與蛇本身。我試過多種方法,例如:

if(parts.size() > 2) { 
     for(int i = 3; i < parts.size(); i++) { 
      if(parts.get(0).getRect().intersect(parts.get(i).getRect())) { 
       die(); 
      } 
     } 
    } 

但只要身體部分陣列達到2份的限制,模具()方法被調用。我不知道爲什麼,因爲第二部分應該坐在頭後面的兩個身體部位,這使得不可能與頭部矩形相交。

我的問題在哪裏?

回答

0

哦,那是我在這裏犯的一個非常大的失敗。 添加新零件時,新零件會獲取頭部的座標。當它在創建座標時會與頭相交!

不過,謝謝你的回覆!

新addPart方法,校正的parts.get(0) - > parts.get(parts.size() - 1)

public void addPart(int amount) { 
    for(int i = 0; i < amount; i++) { 
     parts.add(new BodyPart(parts.get(parts.size()-1).getX(), parts.get(parts.size()-1).getY(), parts.get(parts.size()-1).getHue()-5)); 
    } 
}