第一個Cocos2d-JS遊戲

咱們的編寫的第一個Cocos2d-JS程序,命名爲HelloJS,從該工程開始學習其它的內容。
建立工程
咱們建立Cocos2d-JS工程能夠經過Cocos2d-x提供的命令工具cocos實現,但這種方式不能與WebStorm或Cocos Code IDE集成開發工具很好地集成,不便於程序編寫和調試。因爲Cocos Code IDE工具是Cocos2d-x開發的專門爲Cocos2d-JS和Cocos2d-x Lua開發設計的,所以使用Cocos Code IDE工具很方便建立Cocos2d-JS工程。
首先咱們須要在Cocos Code IDE工具中先配置JavaScript框架,打開Cocos Code IDE工具,選擇菜單Window→Preferences,彈出對話框以下圖所示,選擇Cocos→JavaScript在右邊的JavaScript Frameworks中選擇<Cocos2d-JS引擎目錄>。

javascript

配置JavaScript框架html

JavaScript框架配置不須要每次都進行,只是在最開始的配置一下,但建立工程的時候,Cocos Code IDE工具會從這個JavaScript框架目錄中建立工程文件。
接下來咱們就能夠建立JavaScript工程了,選擇菜單File→New→Project,以下圖所示,彈出項目類型選擇對話框。

html5

項目類型選擇對話框java



咱們選中Cocos JavaScript Project,而後點擊Next按鈕,彈出以下圖所示的對話框。咱們在Project Name項目中輸入工程名稱,Create Project in Workspace是在Workspace目錄中建立工程,咱們須要選中該項目,Create From Existing Resource項目選中可讓咱們從已經存在的工程建立,如今咱們不須要選中該項目。
選擇完成點擊Next按鈕進入到以下圖所示配置運行環境對話框,在該對話框中咱們能夠配置項目運行時信息。Orientation項目是配置模擬器的朝向,其中landscape是橫屏顯示,portriat是豎屏顯。Desktop Runtime Settings中的Title是設置模擬器的標題,Desktop Windows initialize Size是設置模擬器的大小。Add Native Codes是設置添加本地代碼到工程,在原本中咱們不須要添加本地代碼。最後點擊Finish按鈕完成建立操做,建立好工程以後,以下圖所示。

web


新建項目對話框json


配置運行環境對話框canvas


建立工程成功界面數組

Cocos Code IDE中運行
建立好工程後咱們能夠測試一下,在左邊的工程導航面板中選中index.html文件,右鍵菜單中選擇Run As→Cocos JSBinding運行咱們剛剛建立的工程,運行結果以下圖所示。
瀏覽器


運行工程界面微信

咱們主要編寫的程序代碼是在src目錄下,在本例中app.js文件負責處理主要的如上圖場景界面邏輯。若是咱們想調試程序,能夠設置斷點,以下圖所示,點擊行號以前的位置,設置斷點。

設置斷點

調試運行過程,右鍵菜單中選擇Debug As→Cocos JSBinding菜單。以下圖所示,程序運行到第32行掛起,並進入調試視圖,在調試視圖中咱們能夠查看程序運行的堆棧、變量、斷點、計算表達式和單步執行程序等操做。

運行到斷點掛起

在調試視圖中調試工具欄的按鈕,主要調試按鈕說明以下圖所示。

調試工具欄按鈕



WebStorm中運行
Cocos Code IDE工具提供的運行是本地運行,即Cocos2d-JS程序經過JSB在本地運行。若是咱們須要測試Web瀏覽器上運行狀況,須要使用WebStorm工具,因爲咱們已經在Cocos Code IDE建立了工程咱們不須要再建立了,可是須要進入到WebStorm中進行設置,建立文件在本地WebStorm工程,爲了能與Cocos Code IDE共用相同工程咱們須要設置WebStorm的Project Root爲Cocos Code IDE的Workspace目錄。
設置完成界面如圖下所示,其中的HelloJS是咱們要運行的工程,右鍵選擇HelloJS中的index.html文件就能夠運行了,過。運行結果以下圖所示。


設置完成界面


在瀏覽器中運行


工程文件結構
咱們建立的HelloJS工程已經可以運行起來了,下面咱們介紹一下HelloJS工程中的文件結構,咱們使用Cocos Code IDE打開HelloJS工程,左側的導航面板以下圖所示。

HelloJS工程中的文件結構

在上圖所示導航面板中,res文件夾存放資源文件的,src文件夾是主要的程序代碼,其中的app.js是實現遊戲場景的JavaScript文件,resource.js定義資源對應的變量。HelloJS根目錄下還有config.json、project.json、index.html和main.js,config.json保存模擬器運行配置信息,在咱們建立工程時候生成,project.json是項目的配置信息,index.html是Web工程的首頁,main.js與首頁index.html對應的JavaScript文件。
代碼解釋
HelloJS工程中有不少文件下面咱們詳細解釋一下它們內部的代碼: 


一、index.html文件
index.html文件只有在Web瀏覽器上運行纔會啓動它,index.html代碼以下:

[html] view plaincopy在CODE上查看代碼片派生到個人代碼片

  1. <!DOCTYPE html>  

  2. <html>  

  3. <head>  

  4.     <meta charset="utf-8">  

  5.     <title>Cocos2d-html5 Hello World test</title>  

  6.     <link rel="icon" type="image/GIF" href="res/favicon.ico"/>  

  7.     <meta name="apple-mobile-web-app-capable" content="yes"/>             ①  

  8.     <meta name="full-screen" content="yes"/>  

  9.     <meta name="screen-orientation" content="portrait"/>  

  10.     <meta name="x5-fullscreen" content="true"/>  

  11.     <meta name="360-fullscreen" content="true"/>                          ②  

  12.     <style>  

  13.         body, canvas, div {  

  14.             -moz-user-select: none;  

  15.             -webkit-user-select: none;  

  16.             -ms-user-select: none;  

  17.             -khtml-user-select: none;  

  18.             -webkit-tap-highlight-color: rgba(0, 0, 0, 0);  

  19.         }  

  20.     </style>  

  21. </head>  

  22. <body style="padding:0; margin: 0; background: #000;">  

  23. <canvas id="gameCanvas" width="800" height="450"></canvas>                      ③  

  24. <script src="frameworks/cocos2d-html5/CCBoot.js"></script>                      ④  

  25. <script src="main.js"></script>                                             ⑤  

  26. </body>  

  27. </html>  

上述代碼第①~②行是設置網頁的meta信息,meta信息是網頁基本信息,這些設置可以使得index.html網頁很好地在移動設備上顯示。
第③行代碼放置一個canvas標籤,canvas標籤是HTML5提供的,經過JavaScript 能夠在Canvas上繪製 2D 圖形,Cocos2d-JS在網頁運行的遊戲場景都是經過Canvas渲染出來的,Cocos2d-JS的本地運行遊戲場景的渲染是經過OpenGL渲染出來的,事實上HTML5也有相似於OpenGL渲染技術,它是WebGL可是考慮到瀏覽器的支持程度不一樣,Cocos2d-JS沒有采用WebGL渲染技術而是Canvas渲染,雖然Canvas渲染速度不及WebGL,可是通常的網頁遊戲都能知足要求。
第④行代碼是導入JavaScript文件CCBoot.js,咱們不須要維護該文件。第⑤行代碼是導入JavaScript文件main.js,咱們須要維護該文件。
二、main.js文件
main.js負責啓動遊戲場景,不管Web瀏覽器運行仍是本地運行都是經過該文件啓動遊戲場景的,main.js代碼以下:
c

[html] view plaincopy在CODE上查看代碼片派生到個人代碼片

  1. c.game.onStart = function(){                                                ①  

  2.     cc.view.adjustViewPort(true);                                           ②  

  3.     cc.view.setDesignResolutionSize(800, 450, cc.ResolutionPolicy.SHOW_ALL);            ③  

  4.     cc.view.resizeWithBrowserSize(true);                                    ④  

  5.     //load resources  

  6.     cc.LoaderScene.preload(g_resources, function () {                           ⑤  

  7.         cc.director.runScene(new HelloWorldScene());                            ⑥  

  8.     }, this);  

  9. };  

  10. cc.game.run();                                                          ⑦  

上述代碼第①行是啓動遊戲,cc.game是一個遊戲啓動對象。代碼第②~④行是設置遊戲視圖屬性,其中第③行是設置遊戲視圖大小,它涉及到屏幕適配問題,cc.ResolutionPolicy.SHOW_ALL是屏幕適配策略。
第⑤行代碼是加載遊戲場景所須要資源,其中g_resources參數是加載資源的數組,該數組是在src/resource.js文件中定義的。第⑥行代碼是運行HelloWorldScene場景,cc.director是導演對象,運行HelloWorldScene場景會進入到該場景。
第⑦行代碼cc.game.run()是運行遊戲啓動對象。
三、project.json文件
項目配置信息project.json文件代碼以下:

[html] view plaincopy在CODE上查看代碼片派生到個人代碼片

  1. {  

  2.     "project_type": "javascript",  

  3.   

  4.   

  5.     "debugMode" : 1,  

  6.     "showFPS" : true,                                                   ①  

  7.     "frameRate" : 60,                                                   ②  

  8.     "id" : "gameCanvas",  

  9.     "renderMode" : 0,  

  10.     "engineDir":"frameworks/cocos2d-html5",  

  11.   

  12.   

  13.     "modules" : ["cocos2d"],                                                ③  

  14.   

  15.   

  16.     "jsList" : [                                                                ④  

  17.         "src/resource.js",                                              ⑤  

  18.         "src/app.js"                                                        ⑥  

  19.     ]  

  20. }  

project.json文件採用JSON字符串表示,咱們重點關注有標號的語句,其中第①行代碼是設置是否顯示幀率調試信息,幀率調試就是顯示在左下角文字信息。第②行代碼是設置幀率爲60,即屏幕1/60秒刷新一次。第③行代碼是加載遊戲引擎的模塊,Cocos2d-JS引擎有不少模塊,模塊的定義是在HelloJS\frameworks\cocos2d-html5\moduleConfig.json,咱們在資源管理器中才能看到該文件,這些模塊在場景啓動的時候加載,所以必定要根據須要導入,不然形成資源的浪費。例如咱們再添加一個chipmunk物理引擎模塊,代碼第③能夠修改以下形式:
"modules" : ["cocos2d","chipmunk"]
代碼第④~⑥行是聲明須要加載的JavaScript文件,這裏的文件主要是有咱們編寫的,咱們每次添加一個JavaScript文件到工程中,就須要在此處添加聲明。
四、config.json文件
只有在Cocos Code IDE中運行才須要該文件,它是配置模擬器運行信息的,該文件在工程發佈時候和Web環境下運行都沒有用處。但若是想Cocos Code IDE中運行,並改變模擬器大小和方向,能夠修改該文件,config.json文件代碼以下:

[html] view plaincopy在CODE上查看代碼片派生到個人代碼片

  1. {  

  2.   "init_cfg": {                                                             ①  

  3.     "isLandscape": true,                                                ②  

  4.     "name": "HelloJS",                                                  ③  

  5.     "width": 960,                                                       ④  

  6.     "height": 640,                                                      ⑤  

  7.     "entry": "main.js",                                                 ⑥  

  8.     "consolePort": 6050,  

  9.     "debugPort": 5086,  

  10.     "forwardConsolePort": 10088,  

  11.     "forwardUploadPort": 10090,  

  12.     "forwardDebugPort": 10086  

  13.   },  

  14.   "simulator_screen_size": [  

  15.     {  

  16.       "title": "iPhone 3Gs (480x320)",  

  17.       "width": 480,  

  18.       "height": 320  

  19.     },  

  20.     … …  

  21.   ]  

  22. }  

上述代碼第①行是初始配置信息,其中第②行是設置橫屏顯示仍是豎屏顯示,第③行代碼name屬性是設置模擬器上顯示的標題,第④和⑤行是設置屏幕的寬和高,第⑥行代碼是設置入口文件。
五、resource.js文件
resource.js文件是在src文件夾中,處於該文件夾中的文件是由咱們來維護的。在resource.js文件中定義資源對應的變量。resource.js文件代碼以下:

[html] view plaincopy在CODE上查看代碼片派生到個人代碼片

  1. var res = {                                                                 ①  

  2.     HelloWorld_png : "res/HelloWorld.png",  

  3.     CloseNormal_png : "res/CloseNormal.png",  

  4.     CloseSelected_png : "res/CloseSelected.png"  

  5. };  

  6.   

  7.   

  8. var g_resources = [];                                                   ②  

  9. for (var i in res) {  

  10.     g_resources.push(res[i]);                                               ③  

  11. }  

上述代碼第①行是定義JSON變量res,它爲每個資源文件定義一個別名,在程序中訪問資源,資源名不要「寫死[ 寫死被稱爲硬編碼(英語:Hard Code或Hard Coding),硬編碼指的是在軟件實做上,把輸出或輸入的相關參數(例如:路徑、輸出的形式或格式)直接以常量的方式書寫在源代碼中,而非在運行時期由外界指定的設置、資源、數據或格式作出適當迴應。——引自於維基百科 http://zh.wikipedia.org/zh-cn/%E5%AF%AB%E6%AD%BB
]」,而是經過一個可配置的別名訪問,這樣當環境變化以後修改起來很方便。
第②行代碼是定義資源文件集合變量g_resources,它的的內容是經過代碼第③行把res變量中的資源文件循環添加到g_resources中。固然咱們能夠採用下面逐一添加:

[html] view plaincopy在CODE上查看代碼片派生到個人代碼片

  1. var g_resources = [   

  2.     //image  

  3.     res.HelloWorld_png,  

  4.     res.CloseNormal_png,  

  5.     "res/CloseSelected.png"  

  6. ];  

放在g_resources變量這的資源,會在場景其中的時候加載的,在Web瀏覽器下運行若是加載的資源找不到會報出404錯誤。
六、app.js文件
app.js文件是在src文件夾中,處於該文件夾中的文件是由咱們來維護的,咱們看到的圖3-27所示的場景是在app.js中實現的,app.js代碼以下: 

[html] view plaincopy在CODE上查看代碼片派生到個人代碼片

  1. var HelloWorldLayer = cc.Layer.extend({                                     ①  

  2.     sprite:null,                            //定義一個精靈屬性  

  3.     ctor:function () {                      //構造方法  

  4.         this._super();                  //初始化父類  

  5.         var size = cc.winSize;          //得到屏幕大小  

  6.         var closeItem = new cc.MenuItemImage(                               ②  

  7.             res.CloseNormal_png,  

  8.             res.CloseSelected_png,  

  9.             function () {  

  10.                 cc.log("Menu is clicked!");  

  11.             }, this);                                                     

  12.         closeItem.attr({  

  13.             x: size.width - 20,  

  14.             y: 20,  

  15.             anchorX: 0.5,  

  16.             anchorY: 0.5  

  17.         });                                                                 ③  

  18.   

  19.   

  20.         var menu = new cc.Menu(closeItem);  //經過closeItem菜單項建立菜單對象  

  21.         menu.x = 0;                                                     ④  

  22.         menu.y = 0;                                                     ⑤  

  23.         this.addChild(menu, 1); //把菜單添加到當前層上  

  24.   

  25.   

  26.         var helloLabel = new cc.LabelTTF("Hello World", "Arial", 38); //建立標籤對象  

  27.         helloLabel.x = size.width / 2;  

  28.         helloLabel.y = 0;  

  29.         this.addChild(helloLabel, 5);  

  30.         this.sprite = new cc.Sprite(res.HelloWorld_png); //建立精靈對象  

  31.         this.sprite.attr({  

  32.             x: size.width / 2,  

  33.             y: size.height / 2,  

  34.             scale: 0.5,  

  35.             rotation: 180  

  36.         });                                                                 ⑥  

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

  38.   

  39.   

  40.         this.sprite.runAction(  

  41.             cc.sequence(  

  42.                 cc.rotateTo(2, 0),  

  43.                 cc.scaleTo(2, 1, 1)  

  44.             )  

  45.         );  //在精靈對象上執行一個動畫  

  46.         helloLabel.runAction(  

  47.             cc.spawn(  

  48.                 cc.moveBy(2.5, cc.p(0, size.height - 40)),  

  49.                 cc.tintTo(2.5,255,125,0)  

  50.             )  

  51.         );  //在標籤對象上執行一個動畫  

  52.         return true;  

  53.     }  

  54. });  

  55.   

  56.   

  57. var HelloWorldScene = cc.Scene.extend({                                     ⑦  

  58.     onEnter:function () {                                                   ⑧  

  59.         this._super();                                                  ⑨  

  60.         var layer = new HelloWorldLayer();                                  ⑩  

  61.         this.addChild(layer);   //把HelloWorldLayer層放到HelloWorldScene場景中  

  62.     }  

  63. });   



咱們在app.js文件中聲明瞭兩個類HelloWorldScene(見代碼第①行)和HelloWorldLayer(見代碼第⑦行),而後經過HelloWorldScene實例化HelloWorldLayer,見代碼第⑩行。HelloWorldScene是場景,HelloWorldLayer是層,場景包含若干個層,關於場景和層咱們會在下一節再具體介紹。
另外,上述代碼第②行是是建立一個圖片菜單項對象,點擊該菜單項的時候回調function方法。
提示  cc.MenuItemImage中res.CloseNormal_png和res.CloseSelected_png變量是在resource.js文件中定義的資源文件別名,之後res.開通變量都是資源文件的別名,再也不詳細解釋。
第③行代碼是菜單項對象的位置,其中closeItem.attr({…})語句能夠設置多個屬性,相似的還有代碼第⑥行,採用JSON格式表示,x屬性表示x軸座標,y屬性表示y軸座標,anchorX表示x軸錨點,anchorY表示y軸錨點,關於錨點的概念後面小節介紹。關於精靈x和y軸屬性,咱們也能夠經過代碼④和⑤方式設置。

還有上述代碼第⑧行是聲明onEnter方法,它是在進入HelloWorldScene場景時候回調的。onEnter方法是從重寫父類的方法,咱們必需經過this._super()語句調用父類的onEnter方法,見代碼第⑨行所示。


更多內容請關注最新Cocos圖書《Cocos2d-x實戰:JS卷——Cocos2d-JS開發

本書交流討論網站:http://www.cocoagame.net

歡迎加入Cocos2d-x技術討論羣:257760386

更多精彩視頻課程請關注智捷課堂Cocos課程:http://v.51work6.com

智捷課堂現推出Cocos會員,敬請關注:http://v.51work6.com/courseInfoRedirect.do?action=netDetialInfo&courseId=844465&amp;categoryId=0

《Cocos2d-x實戰 JS卷》現已上線,各大商店均已開售:

京東:http://item.jd.com/11659698.html

歡迎關注智捷iOS課堂微信公共平臺,瞭解最新技術文章、圖書、教程信息

相關文章
相關標籤/搜索