下面是一个场景:
我有以下场景:
我有一个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:
}发布于 2013-02-11 21:32:26
在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-11 16:10:40
考虑到你告诉我们的话,你说的话很有道理。
您可能希望在场景中添加某种类型的reset()方法,并在切换到另一个场景或离开特定场景时调用该方法。
但是..。如果它们是类中的变量,那么reset()方法中内置的变量不能重置变量。
添加类似resetSceneVars()的方法,并重新初始化任何需要与创建场景时相同的内容。只要您保持对场景的引用,这些变量就会保留它们的最新值。
https://stackoverflow.com/questions/14809930
复制相似问题