第三十七天 一樂在其中—Android的小遊戲打飛機(一)環境搭建,第三十七天android
8月3日,晴天。"綠樹陰濃夏日長,樓台倒影入池塘, 水晶簾動微風起,滿架薔薇一院香。"
cocos2d是一個開源的遊戲開發架構,利用它可以非常容易的開發2D遊戲。目前最主要的分支是iPhone版本的,你可以在iPhone上開發2D遊戲。它提供了物理,精靈(sprites),視差捲軸(parallax scrolling),支援iPhone touch和accelerator等很多功能。現在在App Store上已經有不少用cocos2d開發的遊戲。
如果你想在Andriod上使用Java語言進行 cocos2d遊戲的開發,可以到這個網址下載相關開發檔案:
https://github.com/ZhouWeikuan/cocos2d,進入上面的網址後,如果不用git或者svn的朋友就在頁面的右下角點那個“Download ZIP”即可。開發時,只需將下載好的cocos-master中的cocos2d-android中的libs目錄中的的內容拷到自己工程的libs目錄下。
一、匯入下載檔案,縱觀全貌
1、下載完成後解壓,裡面有個叫“cocos2d-android”的目錄,因為用Android開發,所以就匯入這個目錄。
2、匯入後,會出現兩個錯誤。
修正方法:第一個錯誤是這個項目是一個Library項目,在屬性中取消它的Libray屬性即可。
第二個錯誤是檔案夾中已經包含了一個jar檔案,和src中的原始碼重複了,只需要刪除/libs/cocos2d-android.jar檔案即可運行。
3、在模擬器上運行,得到一個具有cocos2d遊戲各項功能使用的DEMO列表,可供大家學習參考使用。
二、運行第一個遊戲-靜態飛機
1、MainActivity.java
package edu.eurasia.cocos2d_game01;import org.cocos2d.layers.CCScene;import org.cocos2d.nodes.CCDirector;import org.cocos2d.opengl.CCGLSurfaceView;import android.os.Bundle;import android.app.Activity;public class MainActivity extends Activity {// 建立一個view對象,cocos2d引擎會把圖形繪製在該view對象上面private CCGLSurfaceView view = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);view = new CCGLSurfaceView(this);setContentView(view);// 擷取導演對象CCDirector director = CCDirector.sharedDirector();// 設定遊戲引擎畫面的輸出目標Viewdirector.attachInView(view);// 設定遊戲是否顯示FPS值director.setDisplayFPS(true);// 設定遊戲的重新整理率 FPS = frame per seconddirector.setAnimationInterval(1 / 30.0f);// 產生情境對象CCScene scene = CCScene.node();// 產生圖層對象PlaneLayer layer = new PlaneLayer(this);// 將圖層添加至情境當中scene.addChild(layer);// 通知導演,運行情境director.runWithScene(scene);}} 2、PlaneLayer.java
package edu.eurasia.cocos2d_game01;import org.cocos2d.layers.CCLayer;import org.cocos2d.nodes.CCDirector;import org.cocos2d.nodes.CCSprite;import org.cocos2d.types.CGPoint;import org.cocos2d.types.CGSize;import android.content.Context;public class PlaneLayer extends CCLayer{//聲明一個精靈對象private CCSprite plane;private CCDirector director;private CGSize winSize; public PlaneLayer(Context context){ director = CCDirector.sharedDirector();winSize = director.winSize(); //初始化精靈對象 plane = CCSprite.sprite("p.png"); //設定精靈對象的位置 plane.setPosition(CGPoint.ccp(winSize.width / 2, 200)); this.addChild(plane); }}
需要將一張飛機的圖片p.png放置在assets目錄下。
3、運行結果
原始碼:http://download.csdn.net/detail/zwszws/7717559
4、程式碼分析
Cocos2d的核心結構如
1、CCDirector:導演類是遊戲當中的召集人和領導者,負責調度遊戲當中的一切對象和資源;
Director是一個單例,在全部遊戲中只存在一個執行個體。Director類似電影中的“導演”,正如其名,它經管Cocos2d-x中的所有情境的調度:可以切換當前情境(遊戲中只有一個當前情境),暫停情境中的動作—這跟實際中的導演喊“哢”是一樣的—會暫停全部情境中所有的動作或音效等,當然也可以開始一個情境中的動作和音效。總之,Director扮演著一個導演的角色。
2、CCScene:情境可以簡單的理解為一個關卡,多 個關卡組合在一起就形成了遊戲;
Scene就像一個舞台會擺放各類的元素,有的是固定的:布景和道具,有的元素是可以移動的:男、女主角等。在遊戲世界裡也如此,在一個遊戲情境中會放置不合的元素來點綴我們的情境。當然在遊戲裡,也未必完全跟實際相同,為了便於對元素的操作,我們將不同的元素放在不同的層。在一個情境中可以放置多個層,可以使用addChild函數來把層加入情境中。 在設計一個情境時,一般會產生情境對象,然後再在裡面添加層。
在CCScene承擔的是一個容器的功能,遊戲開發時需要渲染的對象在CCScene裡面統一管理,包括建立、銷毀和情境切換等,而且從其類的結構圖可看出,其直接繼承了CCNode類,CCNode是cocos2d-x的渲染鏈,寫遊戲基本上就是和它打交道了,cocos2d-x同時只能渲染一個CCScene,因此CCScene是渲染的根節點。在構建遊戲時,一般是一個Scene中添加一個或者多個CCLayer,一個Layer中又添加多個CCSprite或者CCMenu,CCSprite中還可以添加CCParticleSystem等等。這樣就構建了一個渲染樹,cocos2d-x曆遍這個樹來將映像顯示在螢幕上。
3、CCLayer:一個情境可以有多個布景層構成;
這裡說的層的概念和Adobe Photoshop上的概念是一樣的。在每一個遊戲中,情境可以由許多層構成,每一層負責各自不同的任務,例如負責顯示背景、負責顯示道具和負責顯示任務等。而在每一層上面,又可以添加不同的元素,如文本、精靈和菜單等。通過層與層之間的組合關係,就能讓遊戲顯示出各種各樣的介面了。當然為了看得清每一層上的東西,很多層都設定成透明或者半透明,否則只能看到最上層的東西了。
4、CCSprite:遊戲當中所有可以運動的東西幾乎都 是精靈,一個布景層當中可以包含多個精靈;
Sprite(精靈)是層中的首要構成元素,精靈CCSprite是整個遊戲開發處理的主要對象,例如天上的飛機、地上的坦克、玩家控制的任務等等都是精靈。CCSprite是一幅2D映像,CCSprite可以通過映像或者映像中的一個矩形子領域建立。實際上,精靈就是一個可以不斷變化的圖片,變化包括位置變化、旋轉、放大、運動等等。
通過c語言編寫一個射擊類的打飛機小遊戲,可以通過鍵盤來進行遊戲,操作方法是“a”“d”“w”或者“
幾百行代碼?建立一個2維數組顯示介面,用switch擷取方向控制字元,針對每一個字元編寫相應的處理邏輯並顯示,差不多就這個思路,以前大二的時候寫過
一個簡單的小遊戲--打飛機一些方法我會點C++,用Java也行
這個貌似沒什麼難度。。。我自己寫了一個打磚塊的東西。。和這個差不多了。。 發你QQ裡邊,你看看。。呵呵。。。、期待交流! QQ:279794658