0

我发现了很多关于碰撞检测的问题,并且我创建了一个足够有效的方法来检测两个给定的对象对是否碰撞。问题是,当我将对象数量从 2 增加到 20 时,算法突然停止正常工作。例如,如果粒子 1 撞击粒子 10,那么粒子 10 会依次跳过其他对象并直接与墙壁碰撞。

其背后的原因是,当粒子 1 实际上与粒子 10 发生碰撞时,我的算法不是检查它们之间的碰撞,而是检查其他对。

根据我的解决方案,将同时为每一对运行碰撞检测方法。现在,我需要将粒子一和粒子二传递给每个线程,其中一和二是要检测碰撞的对象。

这是伪代码:

private double isColliding(Particle One, Particle Two) { 
     //Collision Detection Mechanism
     //Returns 0 if no collision
     //Otherwise returns a double between 0 and 1 
     //used to clip the velocity vector so that it stops right before collision
}

所以,我想知道如何将上述方法转换为在不同的线程上运行不同的对象对......

另外,有没有其他方法可以做到这一点......

注意....上述方法不会改变粒子一或二的任何值,因此可以异步使用....

4

1 回答 1

0

这里是轻量版的线程^^

    double result;
    Thread t = new Thread(){
      public void run(){
        result = isColliding(aParticle, aParticle);
      }
    };
    t.start();

    t.join();

连接让主线程等待线程 t 完成。把它放在一个 2-dim for 循环中,用一个结果数组和一个线程数组迭代每个粒子对,最后调用 join 。你得到了想要的东西。

但是尝试做某事是没有意义的。在多个线程中工作,如果它不是在一个线程中运行 ^^ 所以实际上我对你的回答是。你做了某事。错误的。您应该修复您的碰撞检测功能。如果您需要帮助,您应该向我们提供更多代码。

于 2012-05-18T23:59:48.107 回答