4

所以基本上我试图弄清楚如何在两个矩形之间进行适当的碰撞。检测不是问题,但矩形开始剪裁。我想重置位置,但我该怎么做。我正在尝试使用 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;
    }
}

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

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

如果我使用它,矩形之间会有 1px 的距离。有任何想法吗?谢谢你的帮助 :)

4

2 回答 2

3

http://docs.oracle.com/javase/6/docs/api/java/awt/Rectangle.html

使用Rectangle类。

在这里,一些代码

http://pastebin.com/raw.php?i=TzkST3Hm

于 2012-11-05T13:42:44.093 回答
1

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

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

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

因此,我们目前所拥有的entity1是侵入的像素数量entity2(由于绝对值,反之亦然)。然后,运行一些比较并移动entity1(或entity2) lesser 的值displacement,这应该会产生完美的碰撞。

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

1)确定它们是否碰撞

2)纠正它

3) 渲染

Simply preventing movement after detecting collision will look horrible (especially on low frame rates).

Hope I helped!

~Izman

于 2012-11-05T16:01:02.503 回答