【问题标题】:Slick2d collision detection with Tiles using rectangles使用矩形的 Tiles 的 Slick2d 碰撞检测
【发布时间】:2013-11-10 19:37:33
【问题描述】:

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

 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循环循环遍历每个矩形......我真的很困惑如何使用平台图块进行碰撞检测。有人可以提供帮助吗?请描述性。

【问题讨论】:

    标签: java detection collision slick2d


    【解决方案1】:

    看起来你与哪个矩形碰撞并不重要,所以尝试通过创建一个函数来抽象,如果它与任何块碰撞,则返回 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 循环时,它会在确定应该停止的同时使对象保持下降。通过将下落逻辑从碰撞逻辑中移开,我们可以确定它是否正在碰撞,然后采取适当的行动。

    【讨论】:

    • 非常感谢它的工作!!!!我不明白它是如何工作的,你介意解释一下吗?
    • @user2680805 欢迎您,我已添加到回复中。如果您需要更多说明,请告诉我。另外请将我的回答标记为“已接受”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 2013-10-12
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多