Cocos Creator開發遠非初看起來那麼容易,正早一些可視化開發語言,例如VB,入門很容易,但進入實戰階段,你極可能會發現問題一古腦兒出現。可是,不要怕,根本緣由還在於你不熟悉它。其效率沒必要懷疑,並且官方的主打產品也正是它。開發中,深感官方關於Cocos Creator腳本執行順序尚存在不少不詳細或者透徹的地方;所以,本人結合最近一個時段的學習,做如下幾點補充。html
地址是:http://docs.cocos.com/creator/manual/zh/scripting/execution-order.html
可是,其中提倡使用統一的控制腳原本初始化其餘腳本這一部分尚有一些疑點,例如官方給出的示例代碼是:ide
// Game.js const Player = require('Player'); const Enemy = require('Enemy'); const Menu = require('Menu'); cc.Class({ extends: cc.Component, properties: { player: Player, enemy: Enemy, menu: Menu }, onLoad: function () { this.player.init(); this.enemy.init(); this.menu.init(); } });
可是,當三個腳本Player.js,Enemy.js和Menu.js分別掛載到一些UI組件上時,這個Game.js自己掛載到哪裏?只是簡單地建立一個與最外層Canvas同級的空節點上並把它掛載到上面去嗎?經過個人試驗分析,這是存在問題的。工具
官方的結論是:
「在同一個節點上的組件腳本執行順序,能夠經過組件在 屬性檢查器 裏的排列順序來控制。排列在上的組件會先於排列在下的組件執行。咱們能夠經過組件右上角的齒輪按鈕裏的 Move Up 和 Move Down 菜單來調整組件的排列順序和執行順序。」
這個沒有什麼可值得懷疑的,也很好理解。學習
若某節點是父節點,其下有一個子節點,且這父子節點都各自掛載一些腳本,則執行順序是先執行父節點上的腳本(可能有多個),再執行子節點上的腳本。ui
此種狀況下,按照自上而下的順序執行各節點上掛載的腳本代碼。this
如有以下所示的節點及腳本的掛載結構圖:插件
Canvas1(自己掛載有S1.JS腳本)
其下有子節點BALL(此節點掛載有S11.JS腳本)
Game(自己掛載有S2.JS腳本)
其下有子節點PLATFORM(此節點掛載有S21.JS腳本)debug
因而,根據上面分析有下面的腳本執行順序:
S1.JS S11.JS S2.JS S21.JS3d
例如腳本文件Physics-Settings.js:code
console.info("I am here..."); let physicsManager = cc.director.getPhysicsManager(); physicsManager.enabled = true; physicsManager.debugDrawFlags = // 0; // cc.PhysicsManager.DrawBits.e_aabbBit | cc.PhysicsManager.DrawBits.e_jointBit | cc.PhysicsManager.DrawBits.e_shapeBit ;
此腳本的加載很是之早,在全部軟件自定義腳本的開發以前加載,有下圖爲證:
所以,由上圖可見,程序中全部腳本的加載順序爲:
Cocos2d 引擎
插件腳本(有多個的話按項目中的路徑字母順序依次加載)
普通腳本(打包後只有一個文件,內部按 require 的依賴順序依次初始化)
Cocos Creator入門容易,深刻掌握也不易,但隨着官方提供支持的不斷豐富,相信會進一步簡化咱們的學習。有關JS腳本開發技術,更是Cocos Creator開發中的重中之重,隨着對這個工具的不斷深刻,須要咱們也不斷深刻掌握JS開發技術。本文僅是本人近期一個BOX2D類小遊戲開發過程當中結合本身使用總結出的一點小體會,不當處還但願各位多多批評。