我需要做的是,当我创建的子图与每个子图碰撞时(我已经弄清楚了碰撞),其他子图会传到它们碰撞之前位于的最后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);
}
该代码可以使子画面彼此不相通,但是可以使生成的第一个子画面比后面的子画面更快,因为在开始时,更多的子画面相互碰撞。
最佳答案
我认为这些精灵比简单的圈子还复杂吗?我还假设您已经实现了一些“边界框”冲突检测。
如果是这种情况,那么在检测到碰撞后我将计算一个向量。向量将是每个精灵相对于其中心点相交了多少。然后,您可以沿矢量沿相反方向移动每个精灵,缩放它们相交的距离。这将放置每个精灵,以便它们只是接触。
这是一个很好的解决方案,因为如果每个子画面每帧移动的距离超过1个像素,则每个子画面的最后位置可能相距10像素。看上去永远不会发生碰撞。
..这对于复杂的精灵和简单的圆都适用。