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

时间:2011-01-17 15:08:45

标签: c# design-patterns xna

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

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

所以我认为我应该使用Properties创建一个名为GameObject的抽象类来设置Texture2D,Vector2 Location,Draw()方法和Move()方法。

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

所以我的问题是:

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

2 个答案:

答案 0 :(得分:2)

表面上看,是的设计是有道理的...但根据我的经验(当然是YMMV)我发现尝试从一开始就设计一个深层对象层次结果会导致决定限制你后来。因为每个游戏都是独一无二的,所以当我开始编码,添加游戏元素和重构时,我会有更好的结果。如果有两个具有相似功能的类,那么我要么让它们从公共库继承,要么重构为可以重用的公共类。这给了你两全其美。

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

下载样本,并且学习得很好......这是一个经过验证的真实模式

答案 1 :(得分:0)

另一方面,我认为武器不应该与能够移动的武器属于同一类。

还尝试将你的“模特”与你的精灵分开(想想游戏的MVC)。拥有一个既允许行为可视化扩展的基础对象也许并不总是最好的想法。但对于一个简单的游戏,这是最快(也许)最好的方法。真正重要的是你在想什么尺寸。 (始终从小开始)。