瀏覽器首先載入 index.html 頁面,值得注意的有兩點,在頁面的 DOM 樹中,能看到命名為**gamecanvas**的**Canvas**元素,它將會是遊戲的畫布,另一點,在頁面的最後,載入了 cocos2d.js 檔案。
cocos2d.js 內中,定義了程式執行需要的一些引數,如 顯示 FPS,是否載入擴充套件庫,物理引擎庫等,其中 engineDir 設定了引擎所在的位置,appFiles 設定了,當前專案所用到需要載入的 js 程式程式碼。並定義了當 DOM 載入完成時執行的程式碼(你可以在 【這裡】 檢視所有程式碼。):
window.addEventListener("DOMContentLoaded", function () {
// 新增指令碼
var s = d.createElement("script");
// 這裡判斷了是否使用自定義的 單檔案作為庫載入,對庫的最佳化壓縮檔案
if (c.SingleEngineFile && !c.engineDir) {
s.src = c.SingleEngineFile;
}
else if (c.engineDir && !c.SingleEngineFile) {
s.src = c.engineDir + "platform/jsloader.js";
else {
alert("You must specify either the single engine file OR the engine directory in "cocos2d.js"");
document.ccConfig = c;
s.id = "cocos2d-html5";
// 將指令碼載入到當前文件,地址是 jsloader.js 的實際地址
d.body.appendChild(s);
});
jsloader.js 裡面設定了一堆需要載入的可執行指令碼,儲存在 engine 變數之中,在檔案的最後,我們能夠看到這樣的程式碼:
// 將所有的 appFiles 新增到 engine 中,返回到新定義的變數 que 之中
var que = engine.concat(c.appFiles);
que.push("main.js");
...
// 後面一個 for 迴圈,新增所有檔案到 document 中去
由以上程式碼,便將我們自定義的使用指令碼和 main.js 新增進去了,而最後執行的也是 main.js 指令碼,遊戲的第一個執行場景就由此開始。main.js 裡面建立了一個 cocos2dApp 的型別,它 繼承(雖然在 js 中沒有繼承的概念,但有類似於繼承的機制) 自 cc.Applicatoin,其中我們看到非常熟悉的函式 applicationDidFinishLaunching ,有這樣一段程式碼:
// 呼叫 cc.LoaderScene Loading 介面,用以載入資源
cc.LoaderScene.preload(g_resources, function () {
// 當資源載入完畢,回撥函式,執行第一個場景,而這個場景是由 cocos2dApp 的建構函式傳入
director.runScene(new this.startScene());
}, this);
// main.js 最後一行
var myApp = new cocos2dApp(GameLayer.scene);
在 cocos2dApp 的建構函式中,初始化了一些必要資訊,並呼叫了cc.AppController.shareAppController().didFinishLaunchingWithOptions();,這會間接的呼叫 Application 的 run 方法,從而導致applicationDidFinishLaunching方法被觸發。它運行了cc.LoaderScene的 preLoad 方法,這內中就是 Loading 介面的實現了,它傳入了一個回撥函式,用於確定在資源載入完畢之後啟動第一個場景(Loading 其本身也是一個場景)。
瀏覽器首先載入 index.html 頁面,值得注意的有兩點,在頁面的 DOM 樹中,能看到命名為**gamecanvas**的**Canvas**元素,它將會是遊戲的畫布,另一點,在頁面的最後,載入了 cocos2d.js 檔案。
cocos2d.js 內中,定義了程式執行需要的一些引數,如 顯示 FPS,是否載入擴充套件庫,物理引擎庫等,其中 engineDir 設定了引擎所在的位置,appFiles 設定了,當前專案所用到需要載入的 js 程式程式碼。並定義了當 DOM 載入完成時執行的程式碼(你可以在 【這裡】 檢視所有程式碼。):
window.addEventListener("DOMContentLoaded", function () {
// 新增指令碼
var s = d.createElement("script");
// 這裡判斷了是否使用自定義的 單檔案作為庫載入,對庫的最佳化壓縮檔案
if (c.SingleEngineFile && !c.engineDir) {
s.src = c.SingleEngineFile;
}
else if (c.engineDir && !c.SingleEngineFile) {
s.src = c.engineDir + "platform/jsloader.js";
}
else {
alert("You must specify either the single engine file OR the engine directory in "cocos2d.js"");
}
document.ccConfig = c;
s.id = "cocos2d-html5";
// 將指令碼載入到當前文件,地址是 jsloader.js 的實際地址
d.body.appendChild(s);
});
jsloader.js 裡面設定了一堆需要載入的可執行指令碼,儲存在 engine 變數之中,在檔案的最後,我們能夠看到這樣的程式碼:
// 將所有的 appFiles 新增到 engine 中,返回到新定義的變數 que 之中
var que = engine.concat(c.appFiles);
que.push("main.js");
...
// 後面一個 for 迴圈,新增所有檔案到 document 中去
由以上程式碼,便將我們自定義的使用指令碼和 main.js 新增進去了,而最後執行的也是 main.js 指令碼,遊戲的第一個執行場景就由此開始。main.js 裡面建立了一個 cocos2dApp 的型別,它 繼承(雖然在 js 中沒有繼承的概念,但有類似於繼承的機制) 自 cc.Applicatoin,其中我們看到非常熟悉的函式 applicationDidFinishLaunching ,有這樣一段程式碼:
// 呼叫 cc.LoaderScene Loading 介面,用以載入資源
cc.LoaderScene.preload(g_resources, function () {
// 當資源載入完畢,回撥函式,執行第一個場景,而這個場景是由 cocos2dApp 的建構函式傳入
director.runScene(new this.startScene());
}, this);
// main.js 最後一行
var myApp = new cocos2dApp(GameLayer.scene);
在 cocos2dApp 的建構函式中,初始化了一些必要資訊,並呼叫了cc.AppController.shareAppController().didFinishLaunchingWithOptions();,這會間接的呼叫 Application 的 run 方法,從而導致applicationDidFinishLaunching方法被觸發。它運行了cc.LoaderScene的 preLoad 方法,這內中就是 Loading 介面的實現了,它傳入了一個回撥函式,用於確定在資源載入完畢之後啟動第一個場景(Loading 其本身也是一個場景)。