AndEngine - 更改场景后场景变量不会重置

时间:2013-02-11 10:08:35

标签: java android variables andengine scene

以下是该方案:

我有以下场景:

  1. SplashScene
  2. LoadingScene
  3. GameModeScene
  4. PlayModeScene
  5. GameScene
  6. 我有一个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()     public Sc​​ene 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:
            }
    

2 个答案:

答案 0 :(得分:1)

根据你告诉我们的内容,你所说的话非常有道理。

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

但是......如果它们是您班级中的变量,则内置reset()方法无法重置您的变量。

添加resetSceneVars()之类的方法,并重新初始化任何需要与创建场景时相同的内容。只要您保持对场景的引用,这些变量将保留其最新值。

答案 1 :(得分:1)

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

  

我试过pGameModeSceneto.reset();但它不起作用。

所有方法的作用如下:

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

    this.clearChildScene();
}

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

@Override
public void reset() {
    super.reset();
    myLocalInt = 0; 
    myLocalFancyPantsObject = null;
}