1

这是场景:

我有以下场景:

  1. 飞溅场景
  2. 加载场景
  3. 游戏模式场景
  4. 播放模式场景
  5. 游戏场景

我有一个管理场景之间导航的 SceneController 类。
在 SceneController 我有所有场景的实例。

我正在初始化所有场景实例并在 LoadingScene 中加载所有场景资源。

当我将场景从 GameModeScene 更改为 PlayModeScene - 工作得非常好。
但是,当我尝试再次将场景更改为 GameModeScene 时,在第一次运行 GameModeScene 期间初始化的布尔值和其他变量保持不变并且不会重置。

注意:变量对每个类都是私有的,并且是非静态的

我试过 pGameModeSceneto.reset(); 但它不会工作。
有什么建议吗?

这是我初始化场景实例的方式


SceneController.loadSceneResources()

public void loadSceneResources(SceneType mType){
        switch(mType){
        case SplashScene:
            this.mSplashScene = new SplashScene(this.mActivity);
            break;


        case LoadingScene:
            mLoadingScene = new LoadingScene(mActivity);
            break;

        case GameModeScene:
            mGameModeScene=new GameModeScene(this.mActivity);
            break;

        case PlayModeScene:
            mPlayModeScene=new PlayModeScene(this.mActivity);
            break;

        case GameScene:
            break;

            default:
        }
    }

每个类的构造函数都在加载资源。


这是获取当前场景实例的方法

SceneController.getScene() 公共场景 getScene(SceneType mType){

        switch(mType){
        case SplashScene:
            this.mCurrentScene = mSplashScene;
            break;


        case LoadingScene:
            this.mCurrentScene = mLoadingScene;
            break;

        case GameModeScene:
            this.mCurrentScene = mGameModeScene;
            break;

        case PlayModeScene:
            this.mCurrentScene = mPlayModeScene;
            break;

            default:
        }
4

2 回答 2

1

鉴于您告诉我们的内容,您所说的非常有道理。

您可能希望在场景中添加某种reset()方法,并在切换到不同场景或离开特定场景时调用该方法。

但是......如果它们是您类中的变量,那么内置reset()方法无法重置您的变量。

添加一个方法,例如resetSceneVars()并重新初始化任何需要与创建场景时相同的东西。只要您保持对场景的引用,这些变量就会保持其最新值。

于 2013-02-11T16:10:40.867 回答
1

在 org.andengine.entity.scene.Scene 类中,有一个 reset() 方法,我假设你说的时候指的是这个方法

我试过 pGameModeSceneto.reset(); 但它不会工作。

该方法所做的一切如下:

@Override
public void reset() {
    super.reset();

    this.clearChildScene();
}

你的场景(我假设)正在扩展场景。因此,当您对它们调用 reset() 时,您所做的就是通过 super.reset() 调用从那里初始化父级信息和向上树。(场景扩展实体。)您在场景中创建和设置的所有私有字段都不会受此影响。要获得您想要的行为,请在您的各个场景类中覆盖 reset() 方法。确保在它们的开头调用 super.reset() 并添加初始化信息,即,无论您的“空”场景应该是什么样子。像这样的东西:

@Override
public void reset() {
    super.reset();
    myLocalInt = 0; 
    myLocalFancyPantsObject = null;
}
于 2013-02-11T21:32:26.800 回答