我需要做的是,当我创建的子图与每个子图碰撞时(我已经弄清楚了碰撞),其他子图会传到它们碰撞之前位于的最后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像素。看上去永远不会发生碰撞。

..这对于复杂的精灵和简单的圆都适用。

10-08 04:14