大家好!我的物理引擎磨磨蹭蹭相当不错(感谢要求!),我准备开始对一些更高级的垃圾工作。典型的例子,我试图建立我的碰撞引擎,以便任意委托可以当碰撞发生时得到通知。让我建立了一个场景给你:

说,我们有对象A,对象B,及在物理仿真对象C。我希望能够以通知委托关于A和B之间的碰撞,并通知潜在的不同的委托关于A和C之间的碰撞。

一点背景信息:我有委托已知接口,我有存储状态为我的碰撞检测器的电位(但不要大气压),并有能力来存储状态中的对象本身。类似地,我使用该委托模型来处理冲突解决,简单地设置物理引擎作为委托默认所有对象,允许用户改变该委托如果需要的话。

让每个对象存储现在,我已经尝试过它自己的碰撞委托碰撞发生时将告知。这不起作用,因为当对象具有相同的碰撞代表,同碰撞被处理两次。当我切换到只能使用第一个对象(但是,这种决定)的委托,模拟的顺序成为一个问题。我想用一本字典,但介绍的开销显著量。然而,这好像方向我需要标题。

所以这里的问题:在一个合适的解决方案决一死战。你将如何解决这个问题?

有帮助吗?

解决方案

我必须说,这是一个有点奇怪的是两个对象可以有不同的代表(在碰撞),并且仍然会是坏的,如果两个相同的代表在碰撞解雇。我好像他们都很火的所有时间或只是其中之一应该。一致性是什么在这里我困扰。 解释说,将帮助更多一些。

第二,如果你使用的持有代表每个对象,然后调理活化它的功能(“如果(!一些布尔值,指示此委托已经解雇){做某事}”)天真的版本,这可能与解决一个非常小的开销。 它的工作原理,但我不喜欢这样的代码。

我的建议(有点复杂,所以想想就可以了加工前)是试图把重点放在管理对象,它会遍历所有的代表和调用两个是在相关的碰撞。 的例如下,A和B碰撞,并且所述管理器被调用,它们作为参数。您现在可以通过所有已知系统代表周期(假设他们是少数)和火的那些比赛“委托== a.del或委托== b.del”。 这是在一个更大的开销,但如果我们谈论的是一个小一些代表,如果将相差无几。在另一侧上,这将允许你进一步更耗费你的碰撞检测引擎在该领域的未来(如更多然后每个对象一个代表的存在)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top