零、華麗登場
雖然早已習慣了大家的眼神
但是你們這樣天天盯着我
讓我感覺
好癢
一、什麼是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的日日夜夜。
感謝大家的支持,我是麒麟子