日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cocos2dx-js 初探 整体流程helloworld.html分析

發布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cocos2dx-js 初探 整体流程helloworld.html分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們下載的是cocos2dx-js的精簡版本,主要是為了分析簡單明了,能更清楚的看到架構流程。

下載地址:

http://cocos2d-x.org/filecenter/jsbuilder/

下載輕量版。

?

?----------------------

服務器模擬使用xampp軟件。

調試使用360瀏覽器自帶調試。

開發環境當前沒找到一個好的,暫時使用notepad++編輯,如有好的,請告知。

-----------------

一般學習一個引擎的思路便是閱讀引擎自帶的demo源碼,熟悉架構以及模塊。關于demo,我們下載完整版本,在cocos2d-js-v3.1\samples\js-tests\src 這個路徑下。

關于api查詢,可在官網找到,具體為http://www.cocos2d-x.org/wiki/Reference。

------------

下面我們來分析demo,熟悉下流程。


?




我們來看的是

HelloWorld.html這個文件.

?

?

<!DOCTYPE?html>

<html>

<head>

????<title>Hello?Cocos2d-JS</title>?

????<script?type="text/javascript"?src="cocos2d-js-v3.1-lite.js"?charset="UTF-8"></script>

</head>

<body>???

????<canvas?id="gameCanvas"?width="800"?height="450"></canvas>

????<script?type="text/javascript">

??????????window.onload?=?function(){

??????????????cc.game.onStart?=?function(){

??????????????????//load?resources

??????????????????cc.LoaderScene.preload(["HelloWorld.png"],?function?()?{

??????????????????????var?MyScene?=?cc.Scene.extend({

??????????????????????????onEnter:function?()?{

??????????????????????????????this._super();

??????????????????????????????var?size?=?cc.director.getWinSize();

??????????????????????????????var?sprite?=?cc.Sprite.create("HelloWorld.png");

??????????????????????????????sprite.setPosition(size.width?/?2,?size.height?/?2);

??????????????????????????????sprite.setScale(0.8);

??????????????????????????????this.addChild(sprite,?0);

?

??????????????????????????????var?label?=?cc.LabelTTF.create("Hello?World",?"Arial",?40);

??????????????????????????????label.setPosition(size.width?/?2,?size.height?/?2);

??????????????????????????????this.addChild(label,?1);

??????????????????????????}

??????????????????????});

??????????????????????cc.director.runScene(new?MyScene());

??????????????????},?this);

??????????????};

??????????????cc.game.run("gameCanvas");

??????????};

????</script>

</body>

</html>

?

?

簡單來拆分下:

<script?type="text/javascript"?src="cocos2d-js-v3.1-lite.js"?charset="UTF-8"></script>

引入引擎js

<canvas?id="gameCanvas"?width="800"?height="450"></canvas>

需要一個idgameCanvas?tagcanvas的標簽,為渲染使用。

?

主角代碼為:

?<script?type="text/javascript">

??????????window.onload?=?function(){

??????????????cc.game.onStart?=?function(){

??????????????????//load?resources

??????????????????cc.LoaderScene.preload(["HelloWorld.png"],?function?()?{

??????????????????????var?MyScene?=?cc.Scene.extend({

??????????????????????????onEnter:function?()?{

??????????????????????????????this._super();

??????????????????????????????var?size?=?cc.director.getWinSize();

??????????????????????????????var?sprite?=?cc.Sprite.create("HelloWorld.png");

??????????????????????????????sprite.setPosition(size.width?/?2,?size.height?/?2);

??????????????????????????????sprite.setScale(0.8);

??????????????????????????????this.addChild(sprite,?0);

?

??????????????????????????????var?label?=?cc.LabelTTF.create("Hello?World",?"Arial",?40);

??????????????????????????????label.setPosition(size.width?/?2,?size.height?/?2);

??????????????????????????????this.addChild(label,?1);

??????????????????????????}

??????????????????????});

??????????????????????cc.director.runScene(new?MyScene());

??????????????????},?this);

??????????????};

??????????????cc.game.run("gameCanvas");

??????????};

????</script>

?

?

我們可以看到標準的框架:

window.onload?=?function(){

};

代碼寫在這里,當環境加載完畢觸發。

cc.game.onStart

給這個賦值。

?cc.game.run("gameCanvas");

這個真正開始引擎。

cc.LoaderScene.preload?為加載前面列出來的數組資源,加載完畢后進入第二個函數。

加載完畢,創建了一個Scene?,這個為場景。

cc.director.runScene(new?MyScene());

這個為將場景加載進入導演里面,此時才會去繪制,顯示,以及響應。

我們來看下var?MyScene里面的元素,在onEnter里面添加了一些元素,比如sprite?label?使用addChild?將其加載進入scene里面,最終呈現出來。

?

?

流程整理為:

Window.onload?里面配置cc.game.onStart?為自己加載的第一個界面。

使用?cc.game.run("gameCanvas");進行引擎啟動。

?

下面我們來看下引擎里面的cc.game.run函數的實現:

?

????run:?function?(id)?{

????????var?self?=?this;

????????var?_run?=?function?()?{

????????????if?(id)?{

????????????????self.config[self.CONFIG_KEY.id]?=?id;

????????????}

????????????if?(!self._prepareCalled)?{

????????????????self.prepare(function?()?{

????????????????????self._prepared?=?true;

????????????????});

????????????}

????????????if?(cc._supportRender)?{

????????????????self._checkPrepare?=?setInterval(function?()?{

????????????????????if?(self._prepared)?{

????????????????????????cc._setup(self.config[self.CONFIG_KEY.id]);

????????????????????????self._runMainLoop();

????????????????????????self._eventHide?=?self._eventHide?||?new?cc.EventCustom(self.EVENT_HIDE);

????????????????????????self._eventHide.setUserData(self);

????????????????????????self._eventShow?=?self._eventShow?||?new?cc.EventCustom(self.EVENT_SHOW);

????????????????????????self._eventShow.setUserData(self);

????????????????????????self.onStart();

????????????????????????clearInterval(self._checkPrepare);

????????????????????}

????????????????},?10);

????????????}

????????};

????????document.body??

????????????_run()?:

????????????cc._addEventListener(window,?'load',?function?()?{

????????????????this.removeEventListener('load',?arguments.callee,?false);

????????????????_run();

????????????},?false);

},

?

我們看,這里為首次進入初始化代碼。

?

?????????if?(!self._prepareCalled)?{

????????????????self.prepare(function?()?{

????????????????????self._prepared?=?true;

????????????????});

????????????}

關鍵代碼:在

?if?(cc._supportRender)?里面,這個默認肯定是要支持渲染的。

cc._setup()設置默認參數,一些全局對象創建。

?

????_runMainLoop:?function?()?{

????????var?self?=?this,?callback,?config?=?self.config,?CONFIG_KEY?=?self.CONFIG_KEY,

????????????director?=?cc.director;

????????director.setDisplayStats(config[CONFIG_KEY.showFPS]);

????????callback?=?function?()?{

????????????if?(!self._paused)?{

????????????????director.mainLoop();

????????????????if(self._intervalId)

????????????????????window.cancelAnimationFrame(self._intervalId);

????????????????self._intervalId?=?window.requestAnimFrame(callback);

????????????}

????????};

????????window.requestAnimFrame(callback);

????????self._paused?=?false;

????}

?

關鍵函數requestAnimFrame?執行刷新頻率,?director.mainLoop();?一直執行,推動游戲執行。

調用配置的onstart?函數執行真正代碼。

self.onStart();




?

?

總結

以上是生活随笔為你收集整理的cocos2dx-js 初探 整体流程helloworld.html分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。