java - LibGDX:碰撞仅适用于一个矩形

标签 java android libgdx collision-detection

在我的 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/

相关文章:

android - 在 Android 程序中运行 Linux 终端命令

android - 如何从正常 Activity 中打开列表 fragment

java - LibGDX 中的纹理图集

java - LibGdx 中的输入 - 操作处理

Java 将值映射到逗号分隔的字符串

java - 在Android的surfaceView上绘制

android - 如何等待确认短信在 AsyncTask 中发送?

java - 生成大立方体 block

java - 阻塞、锁定和隔离级别之间的关系是什么?

java - 最佳实践 : String converting batch in instantiating class or capsulated in every instantiated class