微信小遊戲開發之Cocos Creator插件腳本的用法和使用場景

主題

Cocos Creator插件腳本的用法和使用場景,以及碰到的問題解決

特別說明

CocosCreator微信小遊戲開發系列文章,是我在逐步開發過程中,基於官方文檔之上,記錄一些重點內容,以及對官方文檔中有些知識點的補充和分析。

正文

在開發Cocos Creator微信小遊戲的過程中,我們可能會碰到需要在項目中全局都通用的組件,比如Toast、彈窗等等,我們要怎麼優雅的去實現它們呢?

我在之前文章《微信小遊戲開發之面向對象編程和模塊化》中,寫了腳本模塊化的思路和用法,假設現在我們要實現在每個場景中都能隨時Show Toast的功能,第一時間想到的是在每個場景上都添加一個Toast節點,然後show text,一定時間後再自動隱藏。

沒錯,思路是這樣的,動態的添加Toast節點到場景中,並將Toast的功能封裝成獨立的腳本,在需要使用Toast的場景中require腳本,調用對應的show方法就能出現Toast了。

不過Cocos Creator還提供了在編輯器的屬性檢查器上將普通腳本導入爲插件的設置選項。

插件腳本和普通腳本的差異

  • 不能聲明組件
  • 不能require普通腳本
  • 發佈後,腳本內不在任何函數內聲明的局部變量都會暴露成全局變量。編輯器下則和普通腳本相同。(在微信、百度、小米、支付寶、字節跳動小遊戲上,局部變量不會被暴露成全局變量。如果想實現同樣的效果,需要將局部變量用window.Toast = {}方式定義)
  • 插件腳本加載在普通腳本之前(多個插件腳本按項目中的路徑字母順序依次加載)

注意事項

  • 插件包含多個腳本時,則需要把插件用到的所有腳本合併爲單個的 js 文件,比如Async.js

  • 插件依賴於其它插件,也需要把多個插件合併爲單個 js 文件,比如protobuf.js

  • 不支持插件主動加載其它腳本,比如lzma.js

插件腳本的使用

因爲插件腳本中聲明的變量是全局變量,所以在普通腳本中可以直接使用變量名.方法形式來使用插件內容,例如:

Toast.showText('該功能還在開發中', Toast.LENGTH_LONG);

遇到的問題

在使用Toast插件時,在CocosCreator編輯器上運行沒有問題,但是構建後到微信開發者工具上運行,一直提示readFile:fail permission denied,找了半天才發現是因爲加載了引擎內置資源internal目錄下的資源導致的

cc.loader.load({ 
  'uuid': 'b43ff3c2-02bb-4874-81f7-f2dea6970f18' 
}, function (error, result) {
  ...
})

查了各方資料,還是沒有找到怎麼動態加載引擎內置資源的方法,有知道的朋友,麻煩告知一下,謝謝!

資源uuid的獲取方式如下圖:

結尾

既然您看到這了,說明文章對你還有吸引力,幫忙點個贊再走吧,謝謝!

關注我的公衆號「掉隊程序員」,持續輸出更多內容!

自己動手寫,分解項目中的各個模塊需求,通過查文檔和搜索Cocos社區,解決碰到的問題,最終在微信上線了下面這款微信小遊戲《成語錦衣衛》,歡迎大家掃碼體驗,並作爲參考項目模版,開發出屬於自己的小遊戲


預告

下一節和朋友們說一說:場景切換巨慢的原因分析和解決,以及scheduleOnce的延遲加載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章