跨场景共用数据
-
我想让一个场景里面的一类精灵的一些实例数据共用到另一场景的一类精灵的一些实例上。例如
想让场景一里面的a,b精灵实例里面的实例变量共用到场景二里面的另一类a,b精灵实例里面的实例变量。
方法上我使用全局对象位置不能更改不行。
-
@maker发
先了解一下场景切换的原理:场景切换时,会把所有的非全局对象的实例都销毁,然后按新场景的初始实例生成。
那么实例的数据之所以保留不了,原因就很明显了,因为被销毁了,在新场景里你看到的并不是原来创建的实例,而是新生成的实例,自然跟之前的实例没有任何关系,也就没有数据继承的事了,
回到你的问题上,那怎么做到“跨场景共用数据”呢?
既然上面的原理清楚了,那么方法只有两个方向:
1、把原场景的数据用全局对象(数组、辞典等组件默认都是全局对象)或全局变量先把数据记录下来,到了新场景的场景开始时,再把数据设置给新场景的新实例,间接完成数据的继承。
(缺点:转存过程比较麻烦,你需要把你所有需要继承的数据都存下来)
2、把这些要保留数据的对象直接设置成全局对象,这样它们就不会因场景切换而被销毁,到了新场景,它们依旧是原来那几个实例,数据自然也还在它们身上。
(缺点:由于不会销毁原场景的全局对象,所以这些实例到了新场景后,可能会被新场景的初始生成后盖住,需要管理好它们的图层顺序,而且当新旧场景中图层组数量不一致时,它们原先所在的图层组到了新场景也可能产生变动,需做好处理;也由于它们跨场景不会被销毁,所以只需要原场景有这个对象的初始实例即可,新场景不需要放初始实例,不然到了新场景就会新旧加一起会变成更多的实例;由于全局对象的初始实例只会生效一次,再回到原场景时,就不会再创建这些全局对象的初始实例了,所以如果整个游戏过程中,如果不小心把这个初始实例销毁了,可能需要自己手动用事件刷新或重新创建这个初始实例)
-
能力里面有一个保持状态可以保留实例变量,能满足你的需求最好.满足不了就推荐用数组保存下来每次跨场景后按数组再设置一次
-
@q3131330 保持状态能力是回到这个场景时,这个场景中使用了保持状态能力的实例会保持它离开场景前的状态,所以不太适合,毕竟对于非全局对象来说,新场景就是新的实例了,原场景的实例保持了状态也没法影响到新场景
-
This post is deleted!
-
想问一下全局对象在新场景位置大小能做控制吗,我想要的实例在二场景位置和大小都不同,
而且对象上面还有绑定了其他的对象,绑定的能跨场景吗
-
@maker发 如果你能理解上面的内容的话,其实不难发现,全局对象跨场景后,就是在新场景里了,那么新场景的事件自然能对它生效,自然也就能通过场景开始时去设置它的大小和位置,至于绑定的对象,绑定能力除了位置跟目标对象是关联的以外,跟目标对象没有任何其他关联,也就是说,它也是正常的对象,就也会受到上面那些规则的影响,也就依旧遵循“非全局对象跨场景会被销毁”的规则,所以除非它也是全局对象,不然它没法跟着跨场景。
-
终于做到了,爱你宝贝