2013-01-05 6 views
1

Я хочу создать класс, который определяет уровень в игре. Он должен иметь доступ к данным (текстурам), которые используются основным классом игры. Как мне это сделать?Как делиться данными между классами?

namespace xnagame 
{ 

class Level 
{ 
    blockTexture1, blockTexture2; 
    Content.RootDirectory = "Content"; 
    void LoadTextures() 
    { 
     blockTexture1 = Content.Load<Texture2D>("textures/block1"); 
     blockTexture2 = Content.Load<Texture2D>("textures/block2"); 
    } 
} 

Приведенный ниже рисунок моего проекта. Мне нужно получить доступ из класса "Level" к данным, хранящимся в "xnagameContent/текстуры" http://cs403723.userapi.com/v403723602/5635/Pq5jGApDYCU.jpg

+2

http://www.blackwasp.co.uk/csharpobjectoriented.aspx –

+0

Хорошая ссылка LB, спасибо за обмен. –

+0

Возможно, статичный класс с свойством get \ set для каждой из текстур, которые вы хотите, может быть хорошей идеей? –

ответ

0

Try это ....

Основной метод:

Level level = new xnagame.Level(this.Content); 
level.LoadTextures(); 

пользовательский класс Уровень:

namespace xnagame 
{ 
    public class Level 
    { 
     public Texture2D blockTexture1, 
     public Texture2D blockTexture2; 
     public ContentManager content; 

     public Level(ContentManager content) 
     { 
      this.content = content; 
     } 

     public void LoadTextures() 
     { 
      this.blockTexture1 = this.content.Load<Texture2D>("textures/block1"); 
      this.blockTexture2 = this.content.Load<Texture2D>("textures/block2"); 
     } 
    } 
} 
+0

Возможно, это вопрос! Я не знаю, какой тип мой тип должен быть. Нет такого типа, как «Контент». Это пространство имен! – staroselskii

+0

обновил мой ответ .. это может быть не идеально, но он должен направить вас в правильном направлении – MacGyver

+0

вам может быть лучше удалиться на http://gamedev.stackexchange.com .. у них есть тег для «xna» – MacGyver

1

Звучит как идеальный случай для dependency injection. Вы можете передать ссылку на свой класс Content в свой конструктор или сделать его общедоступным.

public class Level 
{ 
    public Level(Content content) 
    { 
     Content = content; 
    } 

    public Content Content { get; set; } 
} 
0

Я не эксперт xna, но я думаю, что объект Xna ContentManager доступен, если вы вывели свой класс из игры. Контент - это свойство класса Game. См. http://msdn.microsoft.com/en-us/library/bb203875.aspx

Если вы хотите отделить код загрузки и поместить его в класс уровня, вы можете передать экземпляр ContentManager, полученный с использованием свойства Content основного игрового класса.

+0

Это, d, но он будет использовать многие ресурсы, которые я не хочу использовать. Это должно быть проще, потому что мне нужно только получить доступ к данным. – staroselskii