适当的碰撞

时间:2012-11-05 13:31:41

标签: java lwjgl slick2d

所以基本上我试图弄清楚如何在两个矩形之间进行适当的碰撞。 检测不是问题,但矩形开始剪辑。我想重置位置,但我该怎么做。 我正在尝试使用dx和dy进行重置,但它不会重置为正确的坐标。

http://i.stack.imgur.com/IU6sK.png(抱歉,我暂时无法使用图片)

System.out.println(this.y + this.h + " " +  e.getY());
if(this.y + this.h >= e.getY())
{
    if(this.dy > 0)
    {
        this.y -= delta * this.dy + 0.1; 
        this.dy = 0;
    }
    else 
    {
        this.y += delta * this.dy;
        this.dy = 0;
        this.inAir = false;
    }
}

此代码只是一个示例,说明我是如何尝试顶级的。 (这=白色矩形,e =橙色矩形)我使用了我的类Entity,它扩展了Rectangle。

在我打电话之前我正在检查交叉路口。这是“白色”实体中的一个函数,并且在主循环的更新函数中检查交集。

如果我使用它,矩形之间就有1像素。 有任何想法吗? 感谢您的帮助:))

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

进行矩形碰撞的最佳方法是使用Rectangle类使用.intersects(Rectangle)方法检测碰撞,然后计算名为displacementXdisplacementY的新变量

displacementX = Math.abs(entitiy1.getX() - entity2.getX());

displacementY = Math.abs(entitiy1.getY() - entity2.getY());

所以我们目前所拥有的是像素entity1entity2上侵入的数量(或者由于绝对值而反之亦然)。然后,运行一些比较并将entity1(或entity2)移动到较小的displacement的值,这将产生完美的碰撞。

至少我是这样做的。矩形碰撞的正确方法是:

1)确定它们是否发生碰撞

2)纠正它

3)渲染

在检测到碰撞后简单地防止移动会看起来很糟糕(特别是在低帧率时)。

希望我帮忙!

〜Izman