在我的 Android 游戏中,只要我的数组中只有一个矩形,碰撞就会起作用,因此它适用于:
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);
有什么问题吗?我不明白如果数组中只有一个矩形它如何工作,但如果有更多矩形则不行。
最佳答案
嗯,那是因为这里的代码 fragment 存在逻辑错误:
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);
关于java - LibGDX:碰撞仅适用于一个矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21938292/