使用矩形使用Tiles进行Slick2d碰撞检测

时间:2013-11-10 19:37:34

标签: java detection collision slick2d

我很困惑。在我做任何事之前,继承代码:

 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循环来循环每个矩形...我真的坚持如何使用平台磁贴进行碰撞检测。有人提供任何帮助吗?请描述一下。

1 个答案:

答案 0 :(得分: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循环时它会让对象掉落而它确定它应该停止。通过将下降逻辑移离碰撞逻辑,我们可以确定它是否发生碰撞,然后采取适当的措施。