最近接触过几个版本的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的飞机大战游戏开发实例(上)
原文:http://www.cnblogs.com/chenshizhutou/p/6715480.html