加载不同级别的内容
Loading content in different levels
我正在构建一个 XNA 游戏,我已经使用这种方法创建了新关卡。
首先我做了一个摘要 class 叫做 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()
我通过在关卡中调用 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.Load
和 land.Load
。我想创建很多具有不同纹理的背景。那么如何在 GameLevel
开始时为我的每个背景对象加载纹理?
我正在考虑使用 DrawableGameComponent
并在 GameLevel
中继承它,但我不能。因为我已经继承了Level
。我还了解到 GameComponent
s 已被弃用。
我在 Game1
中创建了一个静态 ContentManager
引用并将 Game1
的 Content
分配给它。然后我使用该内容在 GameLevel
对象的构造函数中为 Background
对象加载纹理。我以前不认为它会起作用,因为我认为内容每场比赛只加载一次。 (因为它写在 LoadContent
方法的注释中。无论如何它都起作用了。
如果有更好的方法,请告诉我。
我正在构建一个 XNA 游戏,我已经使用这种方法创建了新关卡。
首先我做了一个摘要 class 叫做 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()
我通过在关卡中调用 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.Load
和 land.Load
。我想创建很多具有不同纹理的背景。那么如何在 GameLevel
开始时为我的每个背景对象加载纹理?
我正在考虑使用 DrawableGameComponent
并在 GameLevel
中继承它,但我不能。因为我已经继承了Level
。我还了解到 GameComponent
s 已被弃用。
我在 Game1
中创建了一个静态 ContentManager
引用并将 Game1
的 Content
分配给它。然后我使用该内容在 GameLevel
对象的构造函数中为 Background
对象加载纹理。我以前不认为它会起作用,因为我认为内容每场比赛只加载一次。 (因为它写在 LoadContent
方法的注释中。无论如何它都起作用了。
如果有更好的方法,请告诉我。