LibGDX:碰撞仅适用于一个Rectangle

时间:2014-02-21 15:22:50

标签: java android libgdx collision-detection

在我的安卓游戏中,只要我的数组中只有一个矩形,碰撞就会起作用,所以它适用于此:

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);

有什么问题?我不明白如果数组中只有一个矩形,它是如何工作的,但如果还有更多则不能。

1 个答案:

答案 0 :(得分: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);