我想学习如何为游戏开发中两个对象之间的碰撞情况创建良好的面向对象 (OO) 设计实践。
假设我有一个 SpaceShip 类和一个 Meteor 类。当 Meteor 与 SpaceShip 相撞时,SpaceShip 将被摧毁。
问题:
检查 meteor 和飞船是否有碰撞的方法以及碰撞解决方法(摧毁飞船)应该放在什么类?是在 SpaceShip 类还是 Meteor 类?或者,也许我应该上另一个类,即。 GameArea 或 GameController 类?
注意:为简单起见,假设 Meteor 和 SpaceShip 是图像资源的形式。我习惯使用Java语言,但其他语言也可以。
最佳答案
更自然地认为碰撞检测是不属于 Spaceship 或 Meteor 类的职责。尤其是当这变得复杂时,在不同方向有多种碰撞可能性。如果你把这个逻辑放在这两个类中,它们将需要引用它们周围的许多其他对象,这是不合适的。
您可以在单独的类(class)中使用它,例如 碰撞检测器 它跟踪游戏空间中所有对象的坐标并检测碰撞。在我看来,防撞似乎也是一项单独的责任,应该属于不同的类别。你可以有一个单独的类(class) CollisionResolver 为了这。根据要求,碰撞检测器 可以联系 CollisionResolver .
CollisionResolver 可能需要能够与 Spaceships 交谈,以便建议它们改变方向或命令向 Meteor 发射导弹。
碰撞检测器 和 CollisionResolver 可以坐在游戏空间 /*游戏 Controller *. ETC..
这将促进 Single Responsibility Principle 所以每个组件只会做一个重点任务。
关于oop - 良好的面向对象类设计,用于游戏开发中的碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10099900/