2014-02-21 100 views
0

在我的Android遊戲中的碰撞工作,只要我只有在我的數組一個矩形的作品,所以它這個工程:LibGDX:碰撞只是一個矩形

rects = new Rectangle[1]; 
for(int i = 0; i < rects.length; ++i) 
    rects[i] = new Rectangle(i * 150, 0, 150, 150); 

但如果我添加其他矩形rects = new Rectangle[2];

我碰撞的代碼如下所示:

public boolean collision(Rectangle rect){ 
return (Intersector.overlaps(playerBound, rect)); 
} 

,我使用它是這樣的:

for(int i = 0; i < rects.length; ++i){ 
if(!collision(rects[i])) 
    player.setY(player.getY() - 1f); 
} 

playerBound初始化這樣的:playerBound = new Rectangle(player.getX(), player.getY(), player.getWidth(), player.getHeight() + 1);

問題是什麼?我不明白它是如何工作的,如果只有一個矩形的數組,但沒有更多。

+0

確定的第二個新的矩形在括號之間,總是使用大括號包含在循環或if語句功能。 – david99world

回答

1

嗯,那是因爲在這裏這個代碼片段的邏輯錯誤:

for(int i = 0; i < rects.length; ++i){ 
    if(!collision(rects[i])) 
     player.setY(player.getY() - 1f); 
} 

您檢查碰撞不止一個矩形。假設陣列中的第一個將引起衝突。好吧,Y不會改變。現在還有另一個方面。這第二個回合將而不是導致碰撞。現在會發生什麼?即使發生碰撞,您也可以更改玩家的Y值。

改變它的東西是這樣的:

boolean collision = false; 
for(int i = 0; i < rects.length; ++i){ 
    if(collision(rects[i])) 
     collision = true; 
} 

if (collision == false) 
    player.setY(player.getY() - 1f);