切换场景如何抓住场景指针不让其释放(不是指资源)

之前做cocos - iphone的时候,可以直接retain,强引用场景。怎样切换我之前的老的场景都不释放,我在我想让它释放的时候释放。

目前的loadscene,会走到 AutoReleaseUtils.autoRelease(cc.loader, autoReleaseAssets, scene.dependAssets);这一步
然后老场景就全部释放了,然后加载新场景。

cocos内部框架应该有retain之类的判断吧,我如何添加retainCount阻止释放?还是说目前loadscene方法流程中就没有对retain进行判断?

我看了下目前的框架,之前的_runningScene, _nextScene配合的 replace,push,pop方法,以及onEnter,onExit已经不用了。
目前getScene获取的是_scene,不是_runningScene。

那目前的这套框架,自定义性太弱了。同时只能存在一个场景。

我想做出类似微信的ui结构,下面几个tab,每个tab的场景瞬间切换,在缓存中。然后每个tab可以不停的push scene,但是push scene后,上一个scene是否释放由我来控制。

scene的本质也是一个节点。你在Canvas下面添加N个节点做tab,修改它们的active不就行了。

1赞

这个我当然知道。
如果一共有3000个场景,三个tab,对应3个栈,每个栈分别push出1000个场景。每个场景非常大。那你就不可能全部都载入,然后切换active,那内存就爆了。

如果scene这层不支持,那只能把scene做成prefab。push scene相当于载入prefab.但是这样的结构,就相当于只有一个scene,不用cocos的ui框架,没有onload start回调。做起来不方便。

我重新讲一下我的需求,三个tab对应三个栈。每个栈当前的场景是瞬切的。push一个scene,之前的scene释放,但是关键数据被保存。这样pop的时候我就知道返回那个scene。所以简单的说,一个栈就永远保存一个scene,3个栈就是3个scene。不同栈之间可以瞬切。栈内的scene,push pop就需要重新加载。内存最多占用3个场景的内存。

这个结构如果不能在scene这个层级实现,那就只能从头到尾就一个scene,然后把原先的所有scene做成prefab来实现。这样很不好。
cocos的显示本身就是iOS controller /android activity 里面封装出一套ui。我又再scene里面再封装出一套我自己切换场景用的ui。用引擎就是为了方便,不要自己造轮子啊。

之前cocos - iphone我就是在scene这层实现的。

没有pushscene 功能,只能自己管理场景。