所以基本上我试图弄清楚如何在两个矩形之间进行适当的碰撞。 检测不是问题,但矩形开始剪辑。我想重置位置,但我该怎么做。 我正在尝试使用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像素。 有任何想法吗? 感谢您的帮助:))
答案 0 :(得分:3)
答案 1 :(得分:1)
进行矩形碰撞的最佳方法是使用Rectangle
类使用.intersects(Rectangle)
方法检测碰撞,然后计算名为displacementX
和displacementY
的新变量
displacementX = Math.abs(entitiy1.getX() - entity2.getX());
displacementY = Math.abs(entitiy1.getY() - entity2.getY());
所以我们目前所拥有的是像素entity1
在entity2
上侵入的数量(或者由于绝对值而反之亦然)。然后,运行一些比较并将entity1
(或entity2
)移动到较小的displacement
的值,这将产生完美的碰撞。
至少我是这样做的。矩形碰撞的正确方法是:
1)确定它们是否发生碰撞
2)纠正它
3)渲染
在检测到碰撞后简单地防止移动会看起来很糟糕(特别是在低帧率时)。
希望我帮忙!
〜Izman