0

我很困惑。在我做任何事情之前,代码如下:

 if(inAir&&!falling&&!jumping){

        if(py<600){
              if (!(isBlocked(xminusd, py) || isBlocked(xminus, py + 32 - 1))) {
             falling=true;
        }else{
            py-=2;
            inAir=false;
        }
        }
    }
    for(int g = 0;g<Map.r.size();g++){
    if(rect.intersects(Map.r.get(g))||Map.r.get(g).contains(rect)||rect.contains(Map.r.get(g))||Map.r.get(g).intersects(rect)){
        System.out.println("Intersecting!");
        inAir= false;
        hasjumped=false;
        onPlat = true;
        falling = false;

        jumping = false;
        py-=4;
        break;

    }else{

        onPlat = false;
        if(inAir==false&&!onPlat){
        inAir = true;
        onPlat = false;
        }
    }
    }

现在的问题是,我正在尝试通过为每个图块创建矩形来对某种类型的图块进行碰撞检测,如果玩家与它发生碰撞,它会停止所有运动。(至少明智地下降)。但我遇到了一个问题。我使用了一个数组列表来创建我所有的矩形,并且我正在使用 for 循环来检查每个矩形。问题是,如果它检查一个矩形并且我当前没有与该矩形碰撞,它会立即开始下降,然后重置,因为它找到了我正在碰撞的矩形。问题是我使用for循环循环遍历每个矩形......我真的很困惑如何使用平台图块进行碰撞检测。有人可以提供帮助吗?请描述性。

4

1 回答 1

0

看起来你与哪个矩形碰撞并不重要,所以尝试通过创建一个函数来抽象,如果它与任何块碰撞,则返回 true 或 false 并将其放在你的 else if 语句中。这样,如果您仍在碰撞,它不会在骑车穿过其余块时开始下降

就像是

...
if(colliding())
{
    //stop falling
}
else
{
    //start falling
}
.... 

boolean colliding(){
    for(int g = 0;g<Map.r.size();g++){
        //check for collision if true return true
    }
    return false;
}

编辑:

这样做的原因是因为当您通过 for 循环时,它会在确定它应该停止时使对象保持下降。通过将下降逻辑从碰撞逻辑中移开,我们可以确定它是否正在碰撞,然后采取适当的行动。

于 2013-11-10T19:51:52.240 回答