2015-07-04 4 views
0

Я создаю игру XNA, и я использовал этот метод для создания новых уровней.
Сначала я сделать это абстрактный класс называется Level:Загрузка контента на разных уровнях

public abstract class Level { 
    public abstract void Update(GameTime gameTime); 
    public abstract void Draw(SpriteBatch spriteBatch); 
} 

В объекте Game1 я объявить public static Level currentLevel;
и после инициализации его (как: currentLevel = new GameLevel()), называют это обновление и сделать методы в Game1.Update и Game1.Draw , Когда я хочу изменить уровень, я делаю Game1.currentLevel = new RandomLevel() Загружаю свои текстуры для всех своих уровней в Game1.LoadContent, вызывая метод static Load на моих уровнях.
Мои фактические уровни выглядеть следующим образом:

class GameLevel : Level { 

    Background sky = new Background(new Vector2(0, 0), -0.2f); 
    Background land = new Background(new Vector2(0, 0), -0.2f); 
    public static void Load() 
    { 
     ... 
    } 

    public override void Update(GameTime gameTime) 
    { 
     ... 
    } 
    public override void Draw(SpriteBatch spriteBatch) 
    { 
     ... 
    } 
} 

Моя проблема:
Если мои текстуры статичны в уровнях, я могу загрузить их в свой статический метод Load, который я называю в Game1.LoadContent. Он отлично работает, только если есть статические текстуры (на самом деле, это работает на моих других уровнях). Но на этом уровне у меня нормальные фоновые объекты. Поэтому я не могу позвонить sky.Load и land.Load в статическом методе. Я хочу создать много фонов с разными текстурами. Итак, как мне загрузить текстуру для каждого из моих фоновых объектов в начале GameLevel?
Я думал об использовании DrawableGameComponent и наследовал его в GameLevel, но я не могу. Потому что я уже унаследовал Level. Я также узнал, что GameComponent s устарели.

ответ

0

Я сделал статический ContentManager ссылкой в ​​Game1 и присвоен Game1Content. Затем я использовал этот контент для загрузки текстуры для объекта Background в конструкторе объекта GameLevel. Я не думал, что это будет работать раньше, потому что я думал, что содержимое загружается только один раз за игру. (Как было написано в комментариях метода LoadContent.Он работал в любом случае.
Если есть лучший способ сделать это, пожалуйста, скажите мне.