2013-04-26 40 views
0

我需要这样做,以便当我创建的精灵与每个精灵发生碰撞(我已经计算出碰撞)时,他们会传送到它们之前的最后一个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

我认为这些精灵比简单的圆圈更复杂?我还假设你已经实现了一些“包围盒”碰撞检测。

如果是这样的话,我会在检测到碰撞后计算一个向量。向量将是每个精灵相对于它们的中心点彼此相交的幅度。然后,您可以沿着矢量沿相反方向移动每个精灵,根据它们相交的距离进行缩放。这将定位每个精灵,以便他们只是触摸。

这是一个很好的解决方案,因为如果每个精灵以每帧超过1个像素的速度移动,每个精灵的最后位置可能是10个像素之外。它永远不会像他们实际上相撞。

..这将适用于复杂的精灵和简单的圆圈。

相关问题