我目前正在为 Ludum Dare 编码,我需要能够从自上而下的角度处理碰撞。我知道如何正常处理它们,但我将包括很多可能遇到的事情,所以我想在一个单独的类中处理来自布尔返回的冲突。我这样做的方法是为函数提供玩家碰撞框的输入矩形,然后将所有碰撞存储在函数中。但是,如果我这样做,那么我每次移动时都必须检查是否遇到了什么。有一个更好的方法吗?
问问题
153 次
1 回答
0
首先,特别是如果您正在为 Ludum Dare 制作游戏,那么天真地检查碰撞(遍历每个对象并询问“我是否与此碰撞?”)并没有错,因为您的游戏可能很小,而且您有很多处理器电源备用。
话虽如此,它的效率极低。有两种方法可以改善这一点,它们通常一起实施:
- 应该使用四叉树或其他形式的碰撞优化。这递归地将游戏世界分成象限,每个象限内都有指定数量的实体。这意味着您的角色只检查与少数实体而不是所有实体的碰撞。
- 你真的需要一个事件系统。从您的问题来看,您是游戏开发的初学者。这完全没问题,但是对每个实体进行迭代只是对计算能力的严重浪费。借助事件系统(您可以在 Internet 上的任何地方了解它们,并且它们已在 SFML 中实现了无数次),当发生碰撞时,游戏会得到“通知”,而不是“等待它”。
同样,这两种技术都是先进的,但它伴随着游戏开发的奇妙有趣和严酷世界的领域。神速。
于 2013-08-24T19:11:27.687 回答