目前,我的游戏是这样的:
public class TheGame: Microsoft.Xna.Framework.Game
{
public static Level CurrentLevel;
private Level level1, level2, level3;
protected override void LoadContent()
{
level1 = new Level(//param);
level2 = new Level(//param);
level3 = new Level(//param);
}
protected override void Update(GameTime gameTime)
{
If(something)
LoadLevel(level1);
currentLevel.Update(gameTime);
//
}
LoadLevel(Level theLevel)
{
currentLevel = theLevel;
}
}
问题是,当我用Update()修改currentLevel时,它也会修改Level1。
For example :
Level1 has a crate with position (100,200).
if currentLevel.Update() modifies the crate's position (120,200),
that modifies the crate's position in CurrentLevel AND the crate's position in Level1.
因此,当我重新加载Level1时,该级别与原始级别1不同。
是因为静电?因为我必须克隆Level1?别的什么? :■ 感谢阅读。
答案 0 :(得分:0)
您始终加载相同的变量,因为您将level1
,level2
和level3
存储为主Game类的实例变量,并将它们分配给实例方法中的currentLevel。静态修饰符与它无关。
相反,您应该每次重新加载该级别,或者从您加载的任何数据重建它。另一种选择是使用一种方法将其恢复到其原始状态,但这要求该级别中的所有内容都可以恢复到已知的初始状态。通常,只需重新加载资产或克隆它们就更容易了。