我有一个移动的火星着陆器,我想要在我正在制作的游戏中撞到加油站的顶部时检测到它。我想知道最好的方法来确切知道它们何时命中。
我现在正在做的是我有3个定时器控制水平,垂直和重力运动。每个计时器使火星着陆器移动一点,所以我把碰撞检测代码放在每个的顶部和底部,但由于每一个都每隔50毫秒启动一次a)它不会确切地检测到它碰撞的时间和b)它会调用崩溃检测代码很多次。
这是其中一个计时器的样子,而且对于所有3个计时器几乎都是一样的(我在vb 2008中制作游戏,这只是一些伪代码):
gravity timer:
detectCrash()
Move ship
detectCrash()
End timer
什么是更准确的方式来查看它们是否在从碰撞到调用的代码的响应时间方面发生冲突。
如何将检测次数调用的次数较少?
我可能会制作另一个计时器,每10毫秒左右触发一次并检查碰撞但是这会运行代码很多次(每秒100次)不会吗?
我也很好奇大型游戏如何处理这样的事情,很可能每秒都会发生很多次。
感谢。
答案 0 :(得分:2)
你可以做的一件事就是使用一个计时器来控制16或17毫秒(大约60 fps)的所有移动,但即便这样也可能太快,你应该可以使用40毫秒(25 fps)。在此计时器事件中,在移动之前计算对象的新位置,查看新位置是否会发生碰撞,以及是否移动对象。
至少我会在vb.net中这样做。不过我可能会选择XNA。
答案 1 :(得分:1)
您不希望有单独的计时器来移动对象和检测碰撞。这种方法有几个明显的问题:
'真实'游戏只有一个循环,可以消除大部分问题。在伪代码中:
显然,除了简单的游戏之外,还有更多内容!但这是你想要的方法,而不是试图为你正在进行的所有事情设置单独的循环。