我搜索碰撞检测主题,但他们都是关于检测本身。我的问题更多的是在检测过程之前和之后。我正在写我的第一场大型比赛,我想尽可能提高效率。设置碰撞检测,然后处理2D游戏中的碰撞
游戏的前提是你在游戏区周围飞行。在这个领域将会成为环境,敌舰,以及在太空中漂浮和漂浮的抛射物所提供的不同性质的障碍。如果需要或想要,对象将能够围绕其中心旋转。
我的设置测试的想法是让对象以某种方式加载到队列和列表中。然后游戏将采取队列前面的任何内容并对列表中的所有内容进行测试。它会首先检查以确保列表中的东西不是自己的(这会一直产生一切碰撞的声音)。接下来,游戏将检查队列中的对象与列表中的对象之间是否存在冲突。如果发生碰撞,那么它会标记对象说他们已经发生碰撞,并保存一个参考或任何物体碰撞的内容。例如,如果A与B碰撞,则游戏会告诉A运行碰撞函数,B运行碰撞函数,并且将存储到A中对B的引用,B将存储对A的引用。
然后,游戏将继续检查队列中的对象的冲突,直到它遍历列表为止,每次执行上述操作以说明多个对象击中或被多个对象击中的对象。例如,如果有三个球,A,B和C以及A在同一帧中被B和C两者击中,则A的速度将被B修改,然后被C修改,并且B和C的速度将由A修改。
这样做是否明智?我现在并不担心实际发现的碰撞事件,还有大量的文章或教程以及我自己的想法来解决这个问题。我没有遇到任何前后谈过的事情。我不确定队列和列表中有多少东西会开始导致大量负载并降低游戏速度。现在我的物体都只有x,y位置,x,y速度,他们面对的方向以及其他一些东西。
现在我想我开始漫无边际的事情了。任何洞察力或智慧将不胜感激。
移动向量是否在您遍历队列时更新?看起来B和C的运动向量会被A _after_ A修改后的运动向量发生变化。 – 2012-04-27 16:34:44
它会保存旧值和新值,运行检测过程,然后所有对象会根据需要进行更新。所以在这个例子中,A会与B进行交互,A会保存新的速度。然后,它会与C进行交互,C会修改并保存更新的速度。然后,一旦游戏退出检测,它会运行一个过程来更新对象,使他们使用他们的新速度或做任何事情。 – Azaral 2012-04-27 16:51:25
是的,但是当你计算C的新速度时,C不会使用A的新速度吗?假设我可以想到最简单的碰撞响应,其中A具有起始速度(0,1)并且C具有(0,-1),B也具有(0,-1),A与B中的C和C碰撞相同的帧,首先它被B修改,给出A速度(0,-1),然后它与C碰撞,但是因为它们具有相同的速度矢量,所以它们都不会改变(或者它们都在相同方向上增加速度)。或者你的意思是新的速度存储在一个新的列表中,并且在所有计算完成后交换这些列表? – 2012-04-27 16:57:30