Java AndEngine-场景变量赢得';更改场景后,无法重置

Java AndEngine-场景变量赢得';更改场景后,无法重置,java,android,variables,andengine,scene,Java,Android,Variables,Andengine,Scene,以下是场景: 我有以下场景: 泼溅场面 加载场景 游戏场景 播放模式场景 游戏场景 我有一个SceneControl类,用于管理场景之间的导航。 在SceneControl中,我拥有所有场景的实例 我正在初始化所有场景实例,并在LoadingScene中加载所有场景资源 当我将场景从GameModeScene更改为PlayModeScene时-效果非常好。 但是,当我再次尝试将场景更改为GameModeScene时,在第一次运行GameModeScene期间初始化的布尔值和其他变量保持原样,并且

以下是场景:

我有以下场景:

  • 泼溅场面
  • 加载场景
  • 游戏场景
  • 播放模式场景
  • 游戏场景
  • 我有一个SceneControl类,用于管理场景之间的导航。
    在SceneControl中,我拥有所有场景的实例

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

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

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

    我尝试了pGameModeSceneto.reset();但它不会起作用。
    有什么建议吗

    下面是我如何初始化场景insatnces的


    SceneController.loadSceneResources()

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


    下面是我获取当前场景实例的方法

    SceneController.getScene() 公共场景getScene(场景类型mType){


    考虑到你告诉我们的情况,你所说的完全有道理

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

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


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

    在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;
    }
    

    对不起,我应该注意到@jmr499485所说的基本上是一样的(并且在我面前说的)。你应该给他支票。除非我们都误解了你,否则我们对“变量没有重置”问题的回答是“为什么会重置?”是的,我最后也做了同样的事情。我知道这是java的一个基础,变量在你重新创建类实例或手动重置它们之前是不会重置的;多亏了你们两个,这是一个特性,而不是一个bug。:)如果你想奖励其中一个绿色的复选标记,我将不胜感激。你重写重置方法非常有意义,我我也这么做了。泰:)@CamFred-谢谢-一切都很好。很高兴OP把它弄明白了。
    @Override
    public void reset() {
        super.reset();
    
        this.clearChildScene();
    }
    
    @Override
    public void reset() {
        super.reset();
        myLocalInt = 0; 
        myLocalFancyPantsObject = null;
    }