【问题标题】:C#/XNA Newbie with a Design question有设计问题的 C#/XNA 新手
【发布时间】:2011-01-28 18:08:35
【问题描述】:

我正在尝试使用 C# 和 XNA 设计一个小游戏,在开始之前我想确保这种方法有意义:

基本上,我想创建一个 GameObject 类,其中包含我要在屏幕上绘制的所有元素,无论是武器、怪物、人类、拾取器等。

所以我在想我应该创建一个名为 GameObject 的抽象类,它具有设置 Texture2D、Vector2 位置、Draw() 方法和 Move() 方法的属性。

另外,由于我有人类和怪物,我可以创建一个名为 Biped 或类似的基类,并给它一个“AttackBehavior”属性(它本身就是一个类),这样我就可以创建不同的攻击方法(人类攻击怪物,怪物攻击人类)。我会在我的 GameObject 类中使用 Move() 方法的抽象实现,这样我就可以为不移动的项目(武器等)覆盖它,并为我的人类和怪物提供不同的移动速度、模式等。

所以我的问题是:

  • 这种设计模式有意义吗?我一直在阅读 Head First Design Patterns 并阅读有关组合对象的内容(因此我的 AttackBehavior 对象)
  • 我应该在我的 Game1.cs 中放入什么类型的代码?这应该是 MVC 模式中的“视图”吗?

【问题讨论】:

  • 您的抽象“GameObject”类通常称为“Sprite”

标签: c# design-patterns xna


【解决方案1】:

从表面上看,是的,设计是有道理的……但根据我的经验(当然是 YMMV),我发现尝试从一开始就设计深层对象层次结构会导致做出限制你的决策之后。由于每款游戏都是独一无二的,所以当我刚开始编码、向游戏中添加元素并随时进行重构时,我会获得更好的结果。如果有两个具有相似功能的类,那么我要么让它们从一个公共基础继承,要么重构为一个可以重用的公共类。这让您两全其美。

对于第二个问题,我衷心建议您组织游戏的方式是使用游戏状态管理示例:
http://create.msdn.com/en-us/samples/gamestatemanagement

下载示例,好好学习一下……这是一个久经考验的真实模式

【讨论】:

  • 非常感谢您的帮助,我会检查该模式。我可以想象一开始很容易陷入细节的困境。
  • 小心创建一个 GameObject 类,该类试图表示可以对任何游戏对象执行的所有可能属性或操作。大多数游戏对象不会支持所有操作。您通常最好使用最小的 GameObject 类,该类仅具有所有游戏对象共有的属性,但支持 GetInterface 方法来查询仅由游戏对象的子集支持的接口。例如,您可以拥有物理对象或可损坏对象的接口。
【解决方案2】:

顺便说一句,我认为武器不应该与能够移动的东西属于同一类。

还可以尝试将“模型”与 sprite 分开(想想游戏的 MVC)。拥有一个让行为作为视觉扩展的基础对象可能并不总是最好的主意。但对于一个简单的游戏来说,这是最快(也许也是)最好的方法。真的很重要你在想什么尺寸。 (总是从小处着手)。

【讨论】:

    猜你喜欢
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多