oop - 良好的面向对象类设计,用于游戏开发中的碰撞检测

标签 oop collision-detection

我想学习如何为游戏开发中两个对象之间的碰撞情况创建良好的面向对象 (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/

相关文章:

opengl - 网络上是否有任何示例如何使用着色器实现碰撞检测?

python - 如何执行一个类(python)

c++ - 包含类如何调用包含类的成员函数 - C++中的组合

c# - 在类中表示类型安全属性包的最佳方式是什么?

swift - 父评估失败 : variable not available - sprite kit

java - 检查java中两个对象之间的碰撞

C# 我的数据对象集合应该在哪里实例化?

design-patterns - 垂头丧气可以吗?

c# - OnTriggerEnter() 未调用

java - 将剩余距离推到碰撞平面?