C#/XNA有设计问题的新手

C#/XNA有设计问题的新手,c#,design-patterns,xna,C#,Design Patterns,Xna,我正在尝试使用C#和XNA设计一个小游戏,在开始之前,我想确保这种方法是合理的: 基本上,我想创建一个GameObject类,它包含我将在屏幕上绘制的所有元素,包括武器、怪物、人类、皮卡车等 因此,我想我应该创建一个名为GameObject的抽象类,并使用属性设置Texture2D、Vector2位置、Draw()方法和Move()方法 此外,由于我有人类和怪物,我可以创建一个名为Biped或类似的基类,并给它一个“AttackBehavior”属性(它本身就是一个类),这样我就可以创建不同的攻

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

基本上,我想创建一个GameObject类,它包含我将在屏幕上绘制的所有元素,包括武器、怪物、人类、皮卡车等

因此,我想我应该创建一个名为GameObject的抽象类,并使用属性设置Texture2D、Vector2位置、Draw()方法和Move()方法

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

因此,我的问题是:

  • 这种设计模式有意义吗?我一直在阅读Head-First设计模式和关于组合对象(因此我的AttackBehavior对象)的书籍
  • 我应该在Game1.cs中输入什么类型的代码?这应该是MVC模式中的“视图”吗
表面上看,是的,设计是合理的。。。但根据我的经验(当然是YMMV),我发现尝试从一开始就设计一个深入的对象层次结构会导致一些决策,这些决策会限制您以后的工作。因为每一个游戏都是独一无二的,所以当我刚开始编码、为游戏添加元素和进行重构时,我会有更好的结果。如果有两个类具有相似的功能,那么我要么让它们从公共基继承,要么重构成一个可以重用的公共类。这让你两全其美

关于第二个问题,我衷心建议您使用游戏状态管理示例来组织游戏:


下载示例,并将其学好。。。这是一个久经考验的模式

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


同时试着把你的“模型”和你的精灵分开(想想游戏的MVC)。拥有一个既能让行为作为视觉延伸的基础对象可能并不总是最好的主意。但是对于一个简单的游戏来说,这是最快(也许也是)最好的方法。你在想什么尺寸真的很重要。(一开始总是从小事做起)。

您的抽象“GameObject”类通常被称为“Sprite”。非常感谢您的帮助,我会检查一下这种模式。我可以想象,一开始就很容易陷入细节的泥沼。小心创建一个GameObject类,它试图表示任何游戏对象上可能完成的所有属性或操作。大多数游戏对象不支持所有操作。使用一个最小的GameObject类通常会更好,该类只具有所有游戏对象所共有的属性,但支持GetInterface方法来查询仅由游戏对象子集支持的接口。例如,可以为物理对象或可损坏对象提供接口。