球碰撞:球粘在一起

use*_*565 10 android collision-detection

我按照http://www.emanueleferonato.com/2007/08/19/managing-ball-vs-ball-collision-with-flash/上的示例在Android上创建球碰撞,
我的代码组织如下:

int N = 6; // number of balls
for (int i=0; i<N; i++) {
    // move ball
    // as in line 10~39

    // collision detection
    for(int j=i+1; j<N; j++) {
        // as in line 66~77
    } // end for
} // end for
Run Code Online (Sandbox Code Playgroud)

但是,有时我的球可能粘在一起(重叠).
在这个例子中没有发生同样的情况.
为什么?
我需要为每个球开始一个线程吗?

Jos*_*van 2

当两个球以足够的速度碰撞以至于它们在后续动作循环中无法完全分离时,就会出现此问题。我发现处理这个问题的最佳方法是将它们之间的距离标准化为 (r1 + r2),其中 r 是检测到碰撞时球的半径。这确保了它们将在后续的动作循环中分离,但如果在非常狭小的空间中有很多球,则确实有可能导致额外的碰撞。