正确加载级别而不修改原件

时间:2012-09-23 11:43:06

标签: object static copy loading xna-4.0

目前,我的游戏是这样的:

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?别的什么? :■ 感谢阅读。

1 个答案:

答案 0 :(得分:0)

您始终加载相同的变量,因为您将level1level2level3存储为主Game类的实例变量,并将它们分配给实例方法中的currentLevel。静态修饰符与它无关。

相反,您应该每次重新加载该级别,或者从您加载的任何数据重建它。另一种选择是使用一种方法将其恢复到其原始状态,但这要求该级别中的所有内容都可以恢复到已知的初始状态。通常,只需重新加载资产或克隆它们就更容易了。