以下是该方案:
我有以下场景:
我有一个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 Scene 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:
}
答案 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;
}