零、华丽登场
虽然早已习惯了大家的眼神
但是你们这样天天盯着我
让我感觉
好痒
一、什么是vv
已经不止一个朋友吐槽我代码里面的cc.vv了。
但总的来说,这是历史原因。
大家都知道,cc是cocos的命名空间的缩写。
那vv又是什么鬼?
麒麟子在这里解释一下。
vv 是 vivigames的缩写。
在开始写这个代码的时候,其实是没有成立成都幼麟科技的,当时随便弄了一个vivigames。只是觉得方便记忆,也好发音。
二、为什么要有vv
在我们的游戏中,经常要使用到跨场景的数据传递,当时官方推荐了两个办法。
1、使用常驻节点
使用常驻节点的办法直接就被PASS了,因为这是纯数据,把数据挂在结点上是什么意思?显然我接受不了。数据应该是脱离节点生命周期的,即使是常驻节点,也不行。
2、使用单件类
使用单件类的话,放在现在,有TS版本的情况下,是很好使的。 但放在当初只有JS的时候,代码写起来挺累的。 你想想,在没有智能提示的情况下,到处require一个东西。得有多烦人啊。
于是我寻思着自己定义一个像cc一样的全局变量。
但由于之前没有接触过JS,所以不知道有global, window这样的全局变量存在。也不知道cc是怎么弄出来的。问了官方的某个工程师(是谁我就不说了,晚上别出门) ,告诉我说,既然cc是全局的,那你挂到cc上就好了。
于是,cc.vv就这样离奇的诞生了。
三、如今更好的解决方案
1、window.vv
如果我们想要心里好受一点,同时又不想看到cc.vv的话。 可以把vv放到window上面。
一但我们定义了 window.vv = {xxx:'i m so awesome'};
我们就可以在代码的任何地方通过 vv.xxx 来访问vv中的变量。
2、使用ts的单件类
我们可以定义一个vv.ts 然后在vv.ts中将我们要的东西都放进去。
使用的时候,import即可使用
3、模拟cc机制
大家发现,我们不需要import cc 就能使用cc中的内容。
具体操作就是,不管你使用1还是2,都将这个单件挂到window上,形成全局变量。 然后再在项目根目录下写一个vv.d.ts来配合做智能提示。
值得注意的是,这个d.ts记得和你的代码保持一致
四、结束
任何一个函数,一个框架,一个工具,一个系统,一个产品。
都有着他历史的疤痕。
每一个不可思议的背后。
或许都有一个让人始料未及的原由。
就像文章开头,那个突如其来的骚,让你猝不及防。
然而
正是这些不可思议。
正是这些始料未及。
正是这些猝不及防。
充满了我们编写BUG的日日夜夜。
感谢大家的支持,我是麒麟子