【问题标题】:Loading content in different levels加载不同级别的内容
【发布时间】:2015-07-04 22:25:20
【问题描述】:

我正在构建一个 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() 我通过在我的关卡中调用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 的静态加载方法中加载它们。只有当有静态纹理时它才能正常工作(事实上,它在我的其他关卡中也能正常工作)。但是在这个级别,我有一个正常的背景对象。所以我不能在静态方法中调用sky.Loadland.Load。我想创建很多具有不同纹理的背景。那么如何在GameLevel 开头为我的每个背景对象加载纹理?
我正在考虑使用DrawableGameComponent 并在GameLevel 中继承它,但我不能。因为我已经继承了Level。我还知道GameComponents 已被弃用。

【问题讨论】:

    标签: c# static xna


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多