加载不同级别的内容

本文关键字:加载 | 更新日期: 2023-09-27 18:01:12

我正在构建一个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中调用它的update和draw方法。当我想更改级别时,我执行Game1.currentLevel = new RandomLevel()我通过在我的级别中调用static Load方法来加载Game1.LoadContent中所有级别的纹理
我的实际水平如下:

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已被弃用。

加载不同级别的内容

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