Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 碰撞检测与弹跳_Java_Collision Detection_Physics - Fatal编程技术网

Java 碰撞检测与弹跳

Java 碰撞检测与弹跳,java,collision-detection,physics,Java,Collision Detection,Physics,我正在玩一些游戏,试图让一些东西为以后的项目工作,但我有一个问题,我似乎找不到解决办法 现在,我有工作和准确的碰撞检测,但问题是创造物理。物理学现在很简单,物体的方向和速度都有一个向量,当发生碰撞时,向量是倒转的 问题是,当物体碰撞时,它们会相互挤压,最终导致矢量永远反转,从而产生奇怪的结果。例如,神奇地向上漂浮,或者看起来完全忽略了物理现象 有人能帮我吗 编辑: 检测是通过分离轴定理完成的,我没有编写代码,因为真正要做的是有一个循环来检查碰撞,当发现一个时,向量是反向的。正如我所说,实际检测效

我正在玩一些游戏,试图让一些东西为以后的项目工作,但我有一个问题,我似乎找不到解决办法

现在,我有工作和准确的碰撞检测,但问题是创造物理。物理学现在很简单,物体的方向和速度都有一个向量,当发生碰撞时,向量是倒转的

问题是,当物体碰撞时,它们会相互挤压,最终导致矢量永远反转,从而产生奇怪的结果。例如,神奇地向上漂浮,或者看起来完全忽略了物理现象

有人能帮我吗

编辑:
检测是通过分离轴定理完成的,我没有编写代码,因为真正要做的是有一个循环来检查碰撞,当发现一个时,向量是反向的。正如我所说,实际检测效果很好,我认为我的问题是,正如Sibbo所说,移动对象使其不再碰撞。

我不知道您的实现,但当您检测到碰撞时,您应该移动对象使其不再接触。这将阻止程序进入无休止的碰撞循环

将对象稍微分开(在碰撞阈值之外),并反转速度向量。假设您也使用矢量作为位置,只需更改其值,使对象不再被视为碰撞。

每个对象都应该有一个大小,当它们从彼此的边缘反弹时,它们会从一条线反弹,这条线将它们之间的线分隔开。你认为所有的物体都有相同的质量吗?

我最近为一个大学项目编写了一个billard游戏的物理学(因此,虽然这可能不是符合行业标准的代码,但它做了它应该做的事情);为了避免重复计算相同碰撞的效果,我们最终做了以下工作:我们将所有碰撞存储在java.util.List中,每当计算下一次碰撞时,我们都会检查参与碰撞的两个对象是否已经是上次计算的碰撞的一部分;如果是这种情况,则忽略该对象对


这有一个向上的一面,也有一个向下的一面:向上的一面是,通过使用(最小的)偏移运动,不会引入不精确,这样对象就不会再接触了。缺点是,两个相同对象之间不能一个接一个地发生两次碰撞(例如,不能有[(ball_1,ball_2);(ball_1,ball_2);…],只能有类似[(ball_1,ball_2);(ball_1,table);(ball_1,ball_2);…]的碰撞列表).

您必须提出更具体的问题,并提供一个简明的代码示例,以供我们帮助。现在这个问题太模糊了。这就是我必须做的:)泰