Java 如何为不同对象对同时使用线程进行碰撞检测
我发现了很多关于碰撞检测的问题,并且我已经创建了一个足够有效的方法来检测两个给定的对象对是否发生碰撞。问题是,当我将对象数从2增加到20时,算法突然停止正常工作。例如,如果“粒子一”碰撞到“粒子十”,则“粒子十”依次跳过其他对象并直接碰撞到墙 其背后的原因是,当粒子一与粒子十发生碰撞时,我的算法并没有检查它们之间的碰撞,而是检查其他粒子对 根据我的说法,解决方案是同时为每一对运行碰撞检测方法。现在,我需要将粒子1和粒子2传递给每个线程,其中1和2是要检测碰撞的对象 以下是伪代码:Java 如何为不同对象对同时使用线程进行碰撞检测,java,applet,Java,Applet,我发现了很多关于碰撞检测的问题,并且我已经创建了一个足够有效的方法来检测两个给定的对象对是否发生碰撞。问题是,当我将对象数从2增加到20时,算法突然停止正常工作。例如,如果“粒子一”碰撞到“粒子十”,则“粒子十”依次跳过其他对象并直接碰撞到墙 其背后的原因是,当粒子一与粒子十发生碰撞时,我的算法并没有检查它们之间的碰撞,而是检查其他粒子对 根据我的说法,解决方案是同时为每一对运行碰撞检测方法。现在,我需要将粒子1和粒子2传递给每个线程,其中1和2是要检测碰撞的对象 以下是伪代码: private
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
}
所以,我想知道如何将上述方法转换为针对不同对象对在不同线程上运行
还有,有没有其他方法可以做到这一点
注意。。。。上述方法不会更改“粒子一号”或“粒子二号”的任何值,因此可以异步使用……这里是线程的轻量级版本^
double result;
Thread t = new Thread(){
public void run(){
result = isColliding(aParticle, aParticle);
}
};
t.start();
t.join();
联接允许主线程等待线程t完成。
将其放在一个2维for循环中,使用一个结果数组和一个线程数组迭代每个粒子对,以在最后调用join。你得到了wantet想要的东西
但是,如果某个线程不是在一个线程中运行的,那么尝试让它在多个线程中运行是没有意义的^^
所以实际上我对你的回答是。你做错了某事。您应该修复碰撞检测功能。如果你需要帮助,你应该给我们提供更多的代码 如果完全异步执行此操作,如何重新捕获结果并将其应用于对象?几年前,我做了一个弹跳球模拟,通过这个模拟,我意识到试图让对象“自行移动”(即使用多个线程)是一场灾难。@ControlAltDel我想你误解了,我的意思是,在这篇文章中没有什么比关键部分更重要()方法,我感兴趣的是这个方法的返回值。而且,这种方法不会移动物体,它只是告诉我是否应该剪切速度向量。效果很好,现在每次碰撞都被检测到了。但是小程序的响应时间很糟糕!!!任何关于这方面的建议…似乎你是对的,我没有正确使用布尔值,问题解决了。非常感谢。