我已经使用Ray Wenderlich的cocos2d书和他的示例游戏SpaceVking作为起点,开始了六个月的项目,但是当我添加菜单以允许玩家逃离时,我遇到了一个重大问题。回到主菜单。
问题是该状态被保留在GameplayLayer中。
具体来说,GameplayLayer中的状态在调用方法-(void)runSceneWithID:(SceneTypes)sceneID;
之间保留
(这是replaceScene的包装器)。
GameplayLayer被添加到GameScene节点(CCScene节点),该节点又作为参数传递给replaceScene。
当我重新进入GameplayLayer时会出现问题。这是序列:
在此序列之后,GameplayLayer上一次运行的精灵和标签仍然可见。所以现在有两个具有不同状态的相同级别的实例。例如,来自前一状态的坏人精灵不会更新他们的位置,就像他们在活动层中那样,但是他们的动画仍在运行,但是我的角色无法在当前状态下与他们交互。
我不明白,我认为一旦replaceScene(从调用runSceneWithID方法调用),场景(和附加图层)会被释放?
如果我玩游戏,它可以工作,每个级别都会被下一个使用replaceScene取代。但是,如果我从一个级别进入主菜单并返回我得到重复的图层?我正在使用ARC而且我没有保留任何物体。我相信GameplayLayer所属的场景中的dealloc方法以及GameplayLayer本身正在被调用。
我一直在努力解决这个问题,任何建议都会受到高度赞赏。