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时,这个级别与原来的level1不同。

是因为静态吗?因为我必须克隆 Level1 ?还有什么?:s 感谢阅读。

4

1 回答 1

0

您始终加载相同的变量,因为您将level1,level2level3作为主 Game 类的实例变量并在实例方法中将它们分配给 currentLevel 。static 修饰符与它无关。

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

于 2012-09-24T14:15:08.833 回答