我一直在使用XNA 4.0和C#开发与Windows相关的小游戏。可以通过单独的Windows窗体编辑器(非XNA)编辑单词。
Word类(可序列化)包含以下对象:
String WordName
HashSet<String> PictureFilenames_Set; // this is a list of png file names for what the picture looks like
HashSet<String> AudioFilenames_Set; // this is a list of wav file names for pronounciation
然而,在游戏中,图片被加载到Texture2D中,音频被加载到SoundEffect对象中。
我正在尝试设计好的模块化代码,确保Word类不包含任何本质上不与XNA绑定或如何显示图形的内容。话虽如此,我想知道如何创建XNA特定部分。
你认为这样的事情会是一个好主意吗?
base class SpriteEntity
-- Position x, y
-- Scale
-- Display(gametime)
-- Logic(gametime)
base class SpriteEntity_2D : SpriteEntity
-- Int32 ActiveFrame
-- List<Texture2D> Textures;
-- override Display(gametime) { show the Texture2D }
-- override Logic(gametime) { ... }
注意:你觉得这很奇怪,有SpriteEntity和SpriteEntity_2D吗?我只这样做,所以我也可以为3D模型使用SpriteEntity_3D。
class WordSprite : SpriteEntity_2D
-- ctor WordSprite (Word word)
So, for example, if there was an instance of a Word called `AppleWord` in which:
Word.WordName = "apple"
WordSprite apple = new WordSprite( AppleWord )
Then I can just set position and display it.
apple.X = ..., apple.Y = ...
在WordSprite
构造函数中,它可以检查Word.PictureFilenames_Set
并使用Texture2D.FromStream()
加载它们,但我觉得这样做有两个原因:
我真的希望WordSprite
检查一个自定义的ResourceManager,它包含一个Dictionary
类的资源文件名,会更好吗?
但理想情况下,应该在开始时加载所有可能的资源。
也许我应该有一个名为LoadResourcesFromWordList( List<Word> wordlist )
的方法来查看游戏中可用的单词列表,那时它应该运行文件并调用:
ResourceManager.LoadTexture2DResource( filename )
ResourceManager.LoadWaveFileResource( filename )
将所有内容加载到Dictionary<object> Resources
。
我可以重载[]索引操作符,以便用户可以调用:
ResourceManager[ name_of_resource ]
然后当你创建一个新的WordSprite
时,它会在ctor中执行类似的操作:
foreach( string pictfile in Word.PictureFilenames_Set )
{
WordTextureList.add( ResourceManager[pictfile] )
}
对于这篇文章的巨大篇幅感到抱歉,这是一种思路。我真的很擅长创建漂亮的模块化设计代码,我总是先猜测自己。从OO设计角度来看,这似乎没问题,还是我过于复杂化了?
非常感谢你的帮助!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !
- zoombini
P.S。任何人都可以从游戏设计师的角度推荐一本好书来解决模块化,设计,OO等问题吗?它不一定与C#或XNA相关。
答案 0 :(得分:0)
我不担心将SpriteEntity_2D和SpriteEntity_3d作为单独的类。我认为你的整体设计非常好,但很难说不知道项目的全部范围。如果您还没有,您应该阅读有关游戏的基于组件的系统。这里有一些好东西:https://stackoverflow.com/questions/1901251/component-based-game-engine-design
另外,一本关于设计的好书(与游戏无关)是http://www.amazon.com/First-Design-Patterns-Elisabeth-Freeman/dp/0596007124/ref=sr_1_sc_1?s=books&ie=UTF8&qid=1326855704&sr=1-1-spell