我想你可能问错了问题。
大多数时候,“正确的 OOP 原则”不会在游戏开发过程中出现。当然,在编写游戏代码时,如何将事物划分为类是相当明显的,而不是让“封装和所有那些爵士乐”100% 完美。
游戏开发中的“传统”方法,最简单的说是拥有一个带有虚拟和方法的基类(例如:GameObject
或)。然后为游戏中的每种对象创建一个类,该类继承自该基类并根据需要覆盖这些方法。Actor
Draw
Update
然后,您只需将这些类的实例粘贴到游戏类的列表中,然后循环访问Game.Draw
并Game.Update
在每个实例上调用相应的方法。
您可能需要考虑添加除Draw
and之外的其他方法Update
。LoadContent
就是一个很好的例子。
该类DrawableGameComponent
是这种架构的一个很好的例子(注意它使用内置的Game.Components
作为它的列表)。我个人不推荐使用 XNA 的组件架构(我提倡自己滚动的方法)。但是,如果您以前从未见过Draw
/Update
的东西,那么值得一看。
为了处理你的相机对象,我建议让你的 draw 方法的签名看起来像这样:
public virtual void Draw(Camera camera)
这样,每个游戏对象都可以访问相机并知道如何绘制自己。(请注意,这是不可能的DrawableGameComponent
。)
我强烈建议看一下这个描述可能的游戏架构的答案- 越来越复杂。特别是它更详细地介绍了“Actor 类”方法以及不同的参与者如何交互。