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