2013-05-18 60 views
1

所以,我正在創建一個簡單的2D視頻遊戲。我最近注意到,玩家可以移出屏幕,所以我加了這段代碼:玩家可以移出屏幕?

if (newX <= SIZE * TagsCanvas.SCALE) { 
      newX = SIZE * TagsCanvas.SCALE; 
     } else if (newX >= TagsCanvas.CANVAS_WIDTH - (SIZE * TagsCanvas.SCALE) - getAABB().getRadX()) { 
      newX = TagsCanvas.CANVAS_WIDTH - (SIZE * TagsCanvas.SCALE) - getAABB().getRadX(); 
     } 

     if (newY <= SIZE * TagsCanvas.SCALE) { 
      newY = SIZE * TagsCanvas.SCALE; 
     } else if (newY >= TagsCanvas.CANVAS_HEIGHT - (SIZE * TagsCanvas.SCALE) - getAABB().getRadY()) { 
      newY = TagsCanvas.CANVAS_HEIGHT - (SIZE * TagsCanvas.SCALE) - getAABB().getRadY(); 
     } 

TagsCanvas.CANVAS_WIDTH是畫布對象的寬度。高度是畫布對象的高度。尺寸是玩家的尺寸,尺度是遊戲的規模(現在是2)。 getAABB().getRadX()返回從玩家中心到邊緣的半徑('玩家'是方框)。

現在,x工作正常,但Y部分沒有。它會阻止玩家離開地圖(第一條陳述),但它會讓玩家在太遠的地方下降20點。任何幫助,將不勝感激!

回答

0

你可以做的是通過使用Modulo運算符(即整數除法後的餘數)使其環繞。

說要移動5個單位: 有一個方法:

public void move(int amt){ 
pos = (pos + amt) % TagsCanvas.CANVAS_WIDTH. 
} 

模運算符可以確保值永遠不會等於或大於TagsCanvas.CANVAS_WIDTH更大。

+0

好主意,謝謝 – Tips48

+0

沒問題,樂意幫忙!這很有趣,因爲我最近有一個項目,我不得不使用這個技巧,所以我立即在這裏看到了答案。 –