幼麒棋牌开源版本v1.0中的cc.vv

零、华丽登场

虽然早已习惯了大家的眼神

但是你们这样天天盯着我

让我感觉

好痒


一、什么是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的日日夜夜。

感谢大家的支持,我是麒麟子

发布了230 篇原创文章 · 获赞 542 · 访问量 118万+

猜你喜欢

转载自blog.csdn.net/qq_36720848/article/details/90487541