基於Cocos2d-x-1.0.1的飛機大戰游戲開發實例(上)

来源:http://www.cnblogs.com/Raymond-Kwok/archive/2016/01/14/5128737.html
-Advertisement-
Play Games

最近接觸過幾個版本的cocos2dx,決定每個大變動的版本都嘗試一下。本實例模仿微信5.0版本中的飛機大戰游戲,如圖:一、工具1.素材:飛機大戰的素材(圖片、聲音等)來自於網路2.引擎:cocos2d-1.0.1-x-0.9.23.環境:vs2010二、使用的類1.游戲菜單界面類:PlaneWarM...


最近接觸過幾個版本的cocos2dx,決定每個大變動的版本都嘗試一下。本實例模仿微信5.0版本中的飛機大戰游戲,如圖:

 

一、工具

1.素材:飛機大戰的素材(圖片、聲音等)來自於網路

2.引擎:cocos2d-1.0.1-x-0.9.2

3.環境:vs2010

二、使用的類

1.游戲菜單界面類:PlaneWarMenu——派生自CCLayer類。

 1 // 游戲菜單界面類
 2 class PlaneWarMenu: public CCLayer
 3 {
 4 public:
 5     virtual bool init();  
 6     static cocos2d::CCScene* scene();
 7 
 8     virtual void menuStartCallback(CCObject* pSender);
 9     virtual void menuManualCallback(CCObject* pSender);
10     virtual void menuAboutCallback(CCObject* pSender);
11     virtual void menuBackCallback(CCObject* pSender);
12 
13     LAYER_NODE_FUNC(PlaneWarMenu);
14 };

 

2.游戲界面類:PlaneWarGame——派生自CCLayer類。

 1 // 游戲界面類
 2 class PlaneWarGame :public CCLayer
 3 {
 4 public:
 5     PlaneWarGame();
 6     ~PlaneWarGame();
 7     static CCScene* scene();
 8     virtual bool init();
 9     
10     // 游戲界面的初始化
11     bool initBackground();
12     void bg1roll();
13     void bg2roll();
14     bool initMenu1();
15     bool initMenu2();
16     bool initMenu3();
17 
18     // 游戲界面內的菜單項回調
19     void menuPauseCallback(CCObject* pSender);
20     void menuSoundCallback(CCObject* pSender);
21     void menuBombCallback(CCObject* pSender);
22     void menuResumeCallback(CCObject* pSender);
23     void menuRestartCallback(CCObject* pSender);
24     void menuBackCallback(CCObject* pSender);
25 
26     LAYER_NODE_FUNC(PlaneWarGame);
27 
28     // 敵機產生
29     void addEnemy(float dt);
30     // 玩家發射子彈
31     void shoot(float dt);
32     // 游戲邏輯的迴圈
33     void gameLoop(float dt);
34     void addBullet(CCSprite* bullet, CCPoint pt);
35     // 道具的產生
36     void addProp(float dt);
37     // 游戲的碰撞檢測
38     void updateGame(float dt);
39     // 數據顯示
40     void show();
41     // 游戲結束
42     void gameover(bool isWin);
43 
44     void spriteMoveFinished(CCNode* sender);
45     void killAllEnemys();
46     void releaseEnemys();
47 
48     // 鍵盤消息處理
49     void processWin32KeyPress(UINT message, WPARAM wParam, LPARAM lParam);
50     // 觸摸操作
51     void registerWithTouchDispatcher();
52     virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
53     virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);
54     virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);
55 protected:
56     
57     // 游戲成員
58     PlaySprite*         _player;            // 玩家飛機
59     CCArray*            _enemys;            // 敵方飛機數組
60     CCArray*            _bullets;           // 子彈數組
61     int                 _bulletsDestroyed;  // 子彈擊中目標個數
62 
63     // 游戲控制項
64     CCLabelBMFont*      _label;             // 分數標簽
65     CCMenuItemSprite*   _pause;             // 暫停按鈕
66     CCMenu*             _menu;              // 游戲界面內的菜單(暫停/聲音/炸彈)
67     
68     // 主要游戲屬性
69     bool                _issound;           // 背景音樂開關
70     CCSize              _size;              // 游戲界面大小(屏幕大小)
71     int                 _score;             // 分數
72     bool                _isOver;            // 游戲結束標誌
73 };

 

 

3.游戲介紹類:PlaneWarInfoboard——派生自CCLayer類。

 1 // 游戲介紹類
 2 class PlaneWarInfoboard: public CCLayer
 3 {
 4 public:
 5     virtual bool init();  
 6     static cocos2d::CCScene* scene();
 7 
 8     virtual void menuBackCallback(CCObject* pSender);
 9 
10     LAYER_NODE_FUNC(PlaneWarInfoboard);
11 };

 

4.玩家角色類:PlaySprite——由於直接繼承CCSprite類使用不方便,所以從CCNode類派生,使用組合的方式使用CCSprite類。

 1 // 玩家飛機的運動模式
 2 enum moveMode{
 3     MM_NONE = 0,
 4     MM_UP,
 5     MM_DOWN,
 6     MM_LEFT,
 7     MM_RIGHT
 8 };
 9 // 子彈類型
10 enum bulletKind{
11     BK_SINGLE=0,
12     BK_DOUBLE
13 };
14 
15 // 玩家角色類
16 class PlaySprite: public CCNode
17 {
18 public:
19     virtual void onEnter();
20 
21     PlaySprite();
22     ~PlaySprite();
23 
24     CCRect    getRect();
25     CCPoint getPlayerPt();
26     void    setPlayerPt(CCPoint pt);
27 
28     void    setMoveMode( UINT  message, WPARAM  wParam) ;
29     void    move(float dt);
30     void    die();
31     void    destroy();
32 
33 public:
34     // 屬性
35     moveMode    _mode;             // 運動方式(方向按鍵)
36     bool        _isDragEnabled;   // 可否被滑鼠拖拽(滑鼠移動)
37 
38     bulletKind  _bulletKind;       // 子彈類型(吃道具可變雙發)
39     int         _bombCount;        // 炸彈數量(吃道具獲得)
40 
41 protected:
42     CCSprite*   _sprite;           // 代表精靈
43 };

 

 

5.敵機類:EnemySprite——由於直接繼承CCSprite類使用不方便,所以從CCNode類派生,使用組合的方式使用CCSprite類。

 1 enum EnemyKind{
 2     EK_SMALL=0,
 3     EK_MIDDLE,
 4     EK_BIG
 5 };
 6 
 7 // 敵機類
 8 class EnemySprite: public CCNode
 9 {//敵機可有三種類型
10 public:
11     EnemySprite();
12     ~EnemySprite();
13 
14     virtual void onEnter();
15 
16     CCRect getRect();
17 
18     void spriteMoveFinished(CCNode* sender);
19 
20     void die();
21     void destroy();
22 
23     bool isNull();
24 public:
25     // 屬性
26     int         _hp;            // 血量
27     EnemyKind   _enemyKind;     // 敵機種類
28     bool        _die;           // 已死亡
29     bool        _destroy;       // 已釋放
30 
31 protected:
32     CCSprite*   _sprite;        // 代表精靈
33 };


 

基於Cocos2d-x-1.0.1的飛機大戰游戲開發實例(中)

基於Cocos2d-x-1.0.1的飛機大戰游戲開發實例(下)



 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • https://docs.spring.io/spring-security/site/docs/current/reference/html/headers.html#headers-frame-options
  • JS中 邏輯或 || 邏輯與 && 的使用方法總結 //1、在if判斷中 //if(1==1 || 2==3){}//->兩個條件中只要有一個條件為真,整體就為真 "或者" //if(1==1 && 2==3){}//->兩個條件中只有條件都為真,整體就為真 "並且" //...
  • 之前一直是斷斷續續地進行學習,學了好久之後發覺自己還只是入門水平,於是乎,今日下定決心,以後要系統地學習,並對每天的學習都作一總結。*args和**args的區別:意思就是1還是參數a的值,args表示剩餘的值,kwargs在args之後表示成對鍵值對。程式如下:1 def test(a,*args...
  • 一、面向對象1.1java鍵盤輸入 1.1.1這種方法我認為是最簡單,最強大的,就是用Scanner類import java.util.Scanner; public static void main(String [] args) { Scanner sc = new Scanner(Sys...
  • 這個是用Mac下的Network Utility工具實現ping命令,用Wireshark抓取的ICMP數據包:發送ICMP數據包內容接受ICMP數據包內容一.icmp結構要真正瞭解ping命令實現原理,就要瞭解ping命令所使用到的TCP/IP協議。ICMP(Internet Control Me...
  • 編譯打包 Spark支持Maven與SBT兩種編譯工具,這裡使用了Maven進行編譯打包; 在執行make distribution腳本時它會檢查本地是否已經存在Maven還有當前Spark所依賴的Scala版本,如果不存在它會自動幫你下載到build目錄中並解壓使用;Maven源最好...
  • 接《基於Cocos2d-x-1.0.1的飛機大戰游戲開發實例(上)》三、代碼分析1.界面初始化 1 bool PlaneWarGame::init() 2 { 3 bool bRet = false; 4 do 5 { 6 CC_BREAK_IF(! CCL...
  • 枚舉不要這麼做:全選複製放進筆記i = 0 for item in iterable: print i, item i += 1而是這樣:全選複製放進筆記for i, item in enumerate(iterable): print i, itemEnumerate可以接受...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...