回覆列表
  • 1 # 使用者8616219450500

    瀏覽器首先載入 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 其本身也是一個場景)。

  • 中秋節和大豐收的關聯?
  • 真三國無雙OL裡面偃月刀最好的刻印與鍛鍊是什麼樣的?