java - 碰撞处理程序未按 libgdx java 指定的方式工作

标签 java libgdx

我只是想采用一种通用方法来检查矩形之间的碰撞。如果您碰到矩形的顶部,请停止移动。然而,无论 x 坐标如何,我的矩形似乎都会停止。我有三个掉落的矩形和一个不动的静态矩形,它们应该都落在这个静态矩形的顶部,但是当我运行代码时会发生这种情况。 What happens during execution

这是碰撞处理程序代码

    float distanceY, furthestLeft;
public void update() {

    for (int i = 0; i < stageObjects.size(); i++) {
        iPos = stageObjects.get(i).getPosition();
        iDim = stageObjects.get(i).getDimensions();
        for(int k = 0; k < stageObjects.size(); k++){
            kPos = stageObjects.get(k).getPosition();
            kDim = stageObjects.get(k).getDimensions();
            if(k == i){
                continue;
            }
                distanceY = assignDy();
                furthestLeft = assignDx();
             //DistanceY is the subtraction of one objects y coordinate and 
            // if it equals 0 then they are colliding and the furthest left 
            // is the bottom right x coord of the furthest left objects x 
            //coord so it should check if this x is contained within an
            // objects left x coord to right x coord
            if(distanceY <= 1 && distanceY >= 0 && furthestLeft >= iPos.x && furthestLeft <= iPos.x + iDim.x){
                stageObjects.get(i).react(Tuples.HIT_BOTTOM);
                stageObjects.get(k).react(Tuples.HIT_FROM_TOP);
                System.out.println("Collision: " + stageObjects.get(i).toString() + " with " + 
                stageObjects.get(k).toString());
            }

        }
    }

}


}


public float assignDy(){
    if(kPos.y > iPos.y){
        return Math.abs(kPos.y - (iPos.y + iDim.y));
    }else
        return Math.abs(iPos.y - (kPos.y + kDim.y));
}

public float assignDx(){
    if(kPos.x > iPos.x){
        return kPos.x + kDim.x;
    }else
        return iPos.x + iDim.x;
}

错误就在这里,这里是react方法

    public void react(int occurence){
    if(occurence == Tuples.HIT_BOTTOM){
        velocity.y = 0;
    }
}

但是,如果它们相距较远,代码看起来就会完美。

enter image description here

我还注意到,如果该矩形位于另一个矩形的左侧,则该矩形可能会穿过其他矩形,但如果它完全向右,它将被挂起,就好像它落在该矩形上一样。上面的图像起作用的唯一原因是因为最右边的首先下降,如果它落在左边的矩形之后,另一个矩形左边的任何东西也会被挂起

我只是不明白我到底做错了什么,非常感谢任何帮助!

最佳答案

将条件中的 iPos 更改为更通用的内容,如果 Ipos 或 kPos 是您需要检查的内容,则将像 allocateDx 和 dy 这样的变量分配给 ccheck,如下所示

    public void assignOx(Vector2 ox){
    if(kPos.x > iPos.x){
        ox.x = iPos.x;
        ox.y = iPos.x + iDim.x;
    }else{
        ox.x = kPos.x;
        ox.y = kPos.x + kDim.x;
    }
}

关于java - 碰撞处理程序未按 libgdx java 指定的方式工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33201947/

相关文章:

java - jetty 配置。线程池

java - Sqoop导入表报错ORA-01843

java - 如何销毁libgdx中的应用程序监听器对象

libgdx - 如何计算从点A到点B的给定距离和角度的弹丸运动的初始速度?

java - libgdx 最佳高度和宽度

java - 移动负 BigInteger 值 - Java

java - tomcat中Struts2启动时出现404错误

java - android:以符号键盘模式启动,但不限于纯数字输入

libgdx:有没有办法实现 "fast-forward"粒子效果?

java - Libgdx 对齐不起作用