如何对不同的对象同时使用线程进行碰撞检测

时间:2012-05-18 19:32:18

标签: java applet

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

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

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

这是伪代码:

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
}

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

此外,还有其他方法可以做到.......

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

1 个答案:

答案 0 :(得分:0)

这里是线程的轻微版本^^

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

    t.join();

join让mainthread等待线程t完成。 把它放在一个2-dim for循环中,用结果数组和一个线程数组迭代每个粒子对,最后调用join。而你得到了什么。

但尝试做某事是没有意义的。在多个线程中工作,如果它没有在单个运行^^ 所以我的回答实际上是。你做了......错误。你应该修复你的collisionDetection函数。如果您需要帮助,您应该为我们提供更多代码。