首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AndEngine -场景变量在更改场景后不会重置

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

Stack Overflow用户
提问于 2013-02-11 10:08:35
回答 2查看 621关注 0票数 1

下面是一个场景:

我有以下场景:

  1. SplashScene
  2. LoadingScene
  3. GameModeScene
  4. PlayModeScene
  5. GameScene

我有一个SceneController类,它管理场景之间的导航。

在SceneController中,我对所有场景都有实例。

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

当我把场景从GameModeScene转换到PlayModeScene时--非常好。

但是,当我再次尝试将场景更改为GameModeScene时,在第一次运行GameModeScene时初始化的布尔变量和其他变量将保持原样,不会重置。

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

我尝试了pGameModeSceneto.reset();但是它不能工作。

有什么建议吗?

这里是我如何初始化场景不透明

SceneController.loadSceneResources()

代码语言:javascript
复制
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){

代码语言:javascript
复制
        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:
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-11 21:32:26

在org.andengine.entity.scene.Scene类中,有一个reset()方法,当您说

我尝试了pGameModeSceneto.reset();但是它不能工作。

该方法所做的全部工作如下:

代码语言:javascript
复制
@Override
public void reset() {
    super.reset();

    this.clearChildScene();
}

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

代码语言:javascript
复制
@Override
public void reset() {
    super.reset();
    myLocalInt = 0; 
    myLocalFancyPantsObject = null;
}
票数 1
EN

Stack Overflow用户

发布于 2013-02-11 16:10:40

考虑到你告诉我们的话,你说的话很有道理。

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14809930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档