幼麒棋牌開源版本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的日日夜夜。

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

發佈了233 篇原創文章 · 獲贊 546 · 訪問量 119萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章