【问题标题】:LibGDX: Collision only works with one RectangleLibGDX:碰撞仅适用于一个矩形
【发布时间】:2014-02-21 15:22:50
【问题描述】:

在我的 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);

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

【问题讨论】:

  • 你确定第二个新矩形在大括号之间吗,总是使用大括号来包含循环或 if 语句中的功能。

标签: java android libgdx collision-detection


【解决方案1】:

嗯,那是因为这里的代码 sn-p 有一个逻辑错误:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    相关资源
    最近更新 更多