1

我想写一个简单的程序。

将有单个场景、一个摄像机和某些 3d 对象。我知道,如何实现这一点,这不是问题。问题是 - 如何在 OOP 原则中设计它。我打算制作一类相机和一类 3d 对象。

我的问题是谁在实现 Draw 方法?我认为相机需要实现draw方法,相机将合成BasicEffect和RasterizerState实例,并实现Update和Draw方法。我还想过什么,3D 对象将获取相机状态和设置并自行绘制,或者会有一些第三方类将获取 3D 对象的顶点和相机设置和状态并绘制所有内容。那么什么是正确的 OOP 设计?

4

2 回答 2

3

我想你可能问错了问题。

大多数时候,“正确的 OOP 原则”不会在游戏开发过程中出现。当然,在编写游戏代码时,如何将事物划分为类是相当明显的,而不是让“封装和所有那些爵士乐”100% 完美。

游戏开发中的“传统”方法,最简单的说是拥有一个带有虚拟和方法的基类(例如:GameObject或)。然后为游戏中的每种对象创建一个类,该类继承自该基类并根据需要覆盖这些方法。ActorDrawUpdate

然后,您只需将这些类的实例粘贴到游戏类的列表中,然后循环访问Game.DrawGame.Update在每个实例上调用相应的方法。

您可能需要考虑添加除Drawand之外的其他方法UpdateLoadContent就是一个很好的例子。

该类DrawableGameComponent是这种架构的一个很好的例子(注意它使用内置的Game.Components作为它的列表)。我个人不推荐使用 XNA 的组件架构(我提倡自己滚动的方法)。但是,如果您以前从未见过Draw/Update的东西,那么值得一看。

为了处理你的相机对象,我建议让你的 draw 方法的签名看起来像这样:

public virtual void Draw(Camera camera)

这样,每个游戏对象都可以访问相机并知道如何绘制自己。(请注意,这是不可能的DrawableGameComponent。)

我强烈建议看一下这个描述可能的游戏架构的答案- 越来越复杂。特别是它更详细地介绍了“Actor 类”方法以及不同的参与者如何交互。

于 2012-06-17T08:16:50.620 回答
1

你的问题很广泛。您可以查看Microsoft App Hub上的示例。有许多基本示例,还有一些更复杂的示例,例如Ship Game和其他几个完整游戏。这可以给你一些想法来思考。

于 2012-06-16T17:28:49.707 回答