我需要做到这一点,以便当我创建的精灵与每个精灵碰撞时(我已经发现碰撞),他们会传送到他们碰撞之前的最后x和y位置,这样他们就不会经过彼此。我试过使用这段代码。
double x, y, x2, y2;
if(!r1.intersects(r2)){
x = z.getX();
y = z.getY();
x2 = z2.getX();
y2 = z2.getY();
}
if(r1.intersects(r2)){
z.setX(x);
z.setY(y);
z2.setX(x2);
z2.setY(y2);
}
但它不起作用,因为所有的精灵都在彼此之内。我也尝试过使用它。
if(r1.intersects(r2)){
z.setX(z.getX() - 1);
z.setY(z.getY() - 1);
z2.setX(z2.getX() + 1);
z2.setY(z2.getY() + 1);
}
该代码使得精灵不能相互通过,但它会使得生成的第一个精灵变得比后者更快,因为在开始时它是更多的精灵相互碰撞。
答案 0 :(得分:1)
我认为这些精灵比简单的圆圈更复杂?我还假设你已经实现了一些“边界框”碰撞检测。
如果是这种情况,那么我会在检测到碰撞后计算一个向量。矢量将是每个精灵相对于它们的中心点彼此相交的量值。然后,您可以沿着矢量沿相反方向移动每个精灵,按照它们相交的距离进行缩放。这将定位每个精灵,使他们只是触摸。
这是一个很好的解决方案,因为如果每个精灵每帧移动超过1个像素,则每个精灵的最后位置可能是10像素的距离。它看起来永远不会碰到它们。
..这适用于复杂的精灵和简单的圆圈。