2012-01-17 1 views
0

저는 XNA 4.0과 C#을 사용하는 Windows 용 단어와 관련된 작은 게임을 계속 작업 해 왔습니다. 단어는 별도의 Windows Form 편집기 (XNA가 아닌)를 통해 편집 할 수 있습니다. (직렬화)XNA에서 동적 리소스를 어떻게 분리하고 관리합니까? (디자인)

말씀 클래스는 다음과 같은 오브젝트를 포함합니다

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 객체에로드됩니다.

나는 말씀 클래스는 본질적으로 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를 사용할 수 있도록이 작업을 수행했습니다. WordSprite 생성자에서

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 = ... 

그것은 Word.PictureFilenames_Set을 확인하고 그들 모두를로드 할 Texture2D.FromStream()를 사용하지만, 나는이 두 가지 이유로 나쁜처럼 느낄 수 : 정확히 사용시

  1. 로드 할 수 지연을 가져온다 ??
  2. 두 번 이상로드 될 수 있습니다.
  3. 정말 WordSprite 리소스 파일 이름의 Dictionary 클래스를 포함하는 사용자 정의는 ResourceManager를 확인 가고 싶어

    , 즉 더 나은 것

?

그러나 이상적으로 모든 가능한 리소스는 처음에로드되어야합니다.

는 아마 게임에서 사용할 수있는 단어의 목록을 검토 LoadResourcesFromWordList(List<Word> wordlist)라는 방법을 가지고 있어야하고, 그 시간에, 그것은 파일을 통해 실행해야하고 전화하십시오에 모든 것을로드

ResourceManager.LoadTexture2DResource(filename) 
ResourceManager.LoadWaveFileResource(filename) 

Dictionary<object> Resources.

사용자가 바로 호출 할 수 있도록 나는 [] 인덱스 연산자를 오버로드 할 수있는 것보다 :

ResourceManager[ name_of_resource ]

을 그리고 당신이 그것을 그냥 ctor에이 같은 일을하는 새로운 WordSprite을 만들 때 :

를 이 게시물의 거대한 길이에 대한 죄송합니다
foreach(string pictfile in Word.PictureFilenames_Set) 
    { 
     WordTextureList.add(ResourceManager[pictfile]) 
    } 

, 그것은 생각의 실행 기차의 종류이었다. 나는 좋은 모듈 형 설계 코드를 생성 정말 가난 해요, 나는 항상 제 자신을 생각한다. 이것은 OO 설계 관점에서 괜찮은 것 같습니까, 아니면 과장되어 있습니다.

주셔서 감사합니다 도움을 아주 많이 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! !!

- zoombini

P. 누구나 게임 디자이너의 관점에서 모듈성, 디자인, 객체 지향과 같은 것을 다루는 훌륭한 책을 추천 할 수 있습니까? 반드시 C# 또는 XNA와 관련 될 필요는 없습니다.

답변

0

별도의 클래스로 SpriteEntity_2D 및 SpriteEntity_3d를 사용하는 것에 대해 걱정하지 않아도됩니다. 나는 당신의 전반적인 디자인이 꽤 좋다고 생각하지만 프로젝트의 전체적인 정도를 모른 채 말하기는 어렵다. 아직 사용하지 않았다면 게임을위한 구성 요소 기반 시스템에 대해 읽어야합니다. 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

입니다 : 여기에 몇 가지 좋은 물건이있다
관련 문제