程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 基於Cocos2d-x-1.0.1的飛機大戰游戲開發實例(上),cocos2dx飛機大戰

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

編輯:C++入門知識

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


最近接觸過幾個版本的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的飛機大戰游戲開發實例(下)



 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved