加载不同级别的内容

时间:2015-07-04 13:05:44

标签: c# static xna

我正在构建一个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.UpdateGame1.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)
    {
        ...
    }
}

我的问题:
如果我的纹理在关卡中是静态的,我可以在我在Game1.LoadContent中调用的静态Load方法中加载它们。它只有在有静态纹理时才能正常工作(事实上,它在我的其他级别中就像那样)。但在这个级别,我有一个正常的背景对象。因此,我无法在静态方法中调用sky.Loadland.Load。我想用不同的纹理创建很多背景。那么如何在GameLevel开始时为我的每个背景对象加载纹理? 我在考虑使用DrawableGameComponent并在GameLevel继承它,但我无法做到。因为我已经继承了Level。我也知道GameComponent已被弃用。

1 个答案:

答案 0 :(得分:0)

我在ContentManager中制作了一个静态Game1引用,并将Game1 Content分配给它。然后我使用该内容为Background对象的构造函数中的GameLevel对象加载纹理。我以前认为它不会起作用,因为我认为每个游戏只加载一次内容。 (正如它在LoadContent方法的评论中所写的那样。无论如何它都有效 如果有更好的方法,请告诉我。