最近接触过几个版本的cocos2dx,决定每个大变动的版本都尝试一下。本实例模仿微信5.0版本中的飞机大战游戏,如图:

一、工具

1.素材:飞机大战的素材(图片、声音等)来自于网络

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

3.环境:vs2010

二、使用的类

1.游戏菜单界面类:PlaneWarMenu——派生自CCLayer类。

 // 游戏菜单界面类
class PlaneWarMenu: public CCLayer
{
public:
virtual bool init();
static cocos2d::CCScene* scene(); virtual void menuStartCallback(CCObject* pSender);
virtual void menuManualCallback(CCObject* pSender);
virtual void menuAboutCallback(CCObject* pSender);
virtual void menuBackCallback(CCObject* pSender); LAYER_NODE_FUNC(PlaneWarMenu);
};

2.游戏界面类:PlaneWarGame——派生自CCLayer类。

 // 游戏界面类
class PlaneWarGame :public CCLayer
{
public:
PlaneWarGame();
~PlaneWarGame();
static CCScene* scene();
virtual bool init(); // 游戏界面的初始化
bool initBackground();
void bg1roll();
void bg2roll();
bool initMenu1();
bool initMenu2();
bool initMenu3(); // 游戏界面内的菜单项回调
void menuPauseCallback(CCObject* pSender);
void menuSoundCallback(CCObject* pSender);
void menuBombCallback(CCObject* pSender);
void menuResumeCallback(CCObject* pSender);
void menuRestartCallback(CCObject* pSender);
void menuBackCallback(CCObject* pSender); LAYER_NODE_FUNC(PlaneWarGame); // 敌机产生
void addEnemy(float dt);
// 玩家发射子弹
void shoot(float dt);
// 游戏逻辑的循环
void gameLoop(float dt);
void addBullet(CCSprite* bullet, CCPoint pt);
// 道具的产生
void addProp(float dt);
// 游戏的碰撞检测
void updateGame(float dt);
// 数据显示
void show();
// 游戏结束
void gameover(bool isWin); void spriteMoveFinished(CCNode* sender);
void killAllEnemys();
void releaseEnemys(); // 键盘消息处理
void processWin32KeyPress(UINT message, WPARAM wParam, LPARAM lParam);
// 触摸操作
void registerWithTouchDispatcher();
virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);
protected: // 游戏成员
PlaySprite* _player; // 玩家飞机
CCArray* _enemys; // 敌方飞机数组
CCArray* _bullets; // 子弹数组
int _bulletsDestroyed; // 子弹击中目标个数 // 游戏控件
CCLabelBMFont* _label; // 分数标签
CCMenuItemSprite* _pause; // 暂停按钮
CCMenu* _menu; // 游戏界面内的菜单(暂停/声音/炸弹) // 主要游戏属性
bool _issound; // 背景音乐开关
CCSize _size; // 游戏界面大小(屏幕大小)
int _score; // 分数
bool _isOver; // 游戏结束标志
};

3.游戏介绍类:PlaneWarInfoboard——派生自CCLayer类。

 // 游戏介绍类
class PlaneWarInfoboard: public CCLayer
{
public:
virtual bool init();
static cocos2d::CCScene* scene(); virtual void menuBackCallback(CCObject* pSender); LAYER_NODE_FUNC(PlaneWarInfoboard);
};

4.玩家角色类:PlaySprite——由于直接继承CCSprite类使用不方便,所以从CCNode类派生,使用组合的方式使用CCSprite类。

 // 玩家飞机的运动模式
enum moveMode{
MM_NONE = ,
MM_UP,
MM_DOWN,
MM_LEFT,
MM_RIGHT
};
// 子弹类型
enum bulletKind{
BK_SINGLE=,
BK_DOUBLE
}; // 玩家角色类
class PlaySprite: public CCNode
{
public:
virtual void onEnter(); PlaySprite();
~PlaySprite(); CCRect getRect();
CCPoint getPlayerPt();
void setPlayerPt(CCPoint pt); void setMoveMode( UINT message, WPARAM wParam) ;
void move(float dt);
void die();
void destroy(); public:
// 属性
moveMode _mode;  // 运动方式(方向按键)
bool _isDragEnabled;   // 可否被鼠标拖拽(鼠标移动) bulletKind _bulletKind; // 子弹类型(吃道具可变双发)
int _bombCount; // 炸弹数量(吃道具获得) protected:
CCSprite* _sprite; // 代表精灵
};

5.敌机类:EnemySprite——由于直接继承CCSprite类使用不方便,所以从CCNode类派生,使用组合的方式使用CCSprite类。

 enum EnemyKind{
EK_SMALL=,
EK_MIDDLE,
EK_BIG
}; // 敌机类
class EnemySprite: public CCNode
{//敌机可有三种类型
public:
EnemySprite();
~EnemySprite(); virtual void onEnter(); CCRect getRect(); void spriteMoveFinished(CCNode* sender); void die();
void destroy(); bool isNull();
public:
// 属性
int _hp; // 血量
EnemyKind _enemyKind; // 敌机种类
bool _die; // 已死亡
bool _destroy; // 已释放 protected:
CCSprite* _sprite; // 代表精灵
};

基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)的更多相关文章

  1. 基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(中)

    接<基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)> 三.代码分析 1.界面初始化 bool PlaneWarGame::init() { bool bRet = fals ...

  2. 基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(下)

    在飞机大战游戏开发中遇到的问题和解决方法: 1.在添加菜单时,我要添加一个有背景的菜单,需要在菜单pMenu中添加一个图片精灵,结果编译过了但是运行出错,如下图: 查了很多资料,调试了很长时间,整个人 ...

  3. 基于Cocos2d-x-1.0.1的飞机大战游戏迁移到Cocos2d-x-3.0版本,并移植到Android平台成功运行

    一.版本迁移中的问题 1.游戏元素Sprite.Label.Action等等的创建函数名都改为create. 2.函数的回调callfunc_selectorcallfuncN_selectorcal ...

  4. 微信5.0 Android版飞机大战破解无敌模式手记

    微信5.0 Android版飞机大战破解无敌模式手记 转载: http://www.blogjava.net/zh-weir/archive/2013/08/14/402821.html 微信5.0 ...

  5. 11.pygame飞机大战游戏整体代码

    主程序 # -*- coding: utf-8 -*- # @Time: 2022/5/20 22:26 # @Author: LiQi # @Describe: 主程序 import pygame ...

  6. "飞机大战"游戏_Java实现_详细注释

    1 package cn.xiaocangtian.Util; import java.awt.Frame; import java.awt.Graphics; import java.awt.Ima ...

  7. 用Javascript模拟微信飞机大战游戏

    最近微信的飞机大战非常流行,下载量非常高. 利用JS进行模拟制作了一个简单的飞机大战[此源码有很多地方可以进行重构和优化] [此游戏中没有使用HTML5 任何浏览器都可以运行]. 效果图: 原理:利用 ...

  8. 一、利用Python编写飞机大战游戏-面向对象设计思想

    相信大家看到过网上很多关于飞机大战的项目,但是对其中的模块方法,以及使用和游戏工作原理都不了解,看的也是一脸懵逼,根本看不下去.下面我做个详细讲解,在做此游戏需要用到pygame模块,所以这一章先进行 ...

  9. "飞机大战"游戏_Java

    1 package cn.xiaocangtian.Util; import java.awt.Frame; import java.awt.Graphics; import java.awt.Ima ...

随机推荐

  1. 随手练——大量级阶乘 - HDU-2674 N!Again

     N!Again Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  2. [luogu1979] 华容道

    题面 ​ 先讲点无关的,这道题是真的恶心... ​ 好了,第一眼看到这道题,肯定是准备暴搜的,但是想了一想,省选难度的题目不可能一上来就让你暴搜吧,于是开启了无穷无尽的分析,我们不妨设指定棋子叫做移动 ...

  3. valgrind massif内存分析[转]

    valgrind检查内存泄露 #valgrind   ./程序 内存泄漏问题,我们有memcheck工具来检查.很爽.但是有时候memcheck工具查了没泄漏,程序一跑,内存还是狂飙.这又是什么问题. ...

  4. JQ中$(window).load和$(document).ready区别与执行顺序

    JQ中的$(document).ready()大家应该用的非常多,等同于$(function(){}),基本每个JS脚本中都有这个函数的出现有时甚至会出现多个,那么另一个加载函数$(window).l ...

  5. Loadrunner手动关联详解

    Loadrunner手动关联详解 一.关联的含义: 关联(correlation):在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到 ...

  6. Android性能测试之Monkey使用

    内容中包含 base64string 图片造成字符过多,拒绝显示

  7. JNI由浅入深_8_JNI缓存字段和方法ID

    获取字段ID和方法ID时,需要用字段.方法的名字和描述符进行一个检索.检索过程相对比较费时,因此本节讨论用缓存技术来减少这个过程带来的消耗.缓存字段ID和方法ID的方法主要有两种.两种区别主要在于缓存 ...

  8. 【CSS3基础-Flex布局】

    关于Flex 背景 在flex布局出现以前,常用的水平和垂直居中对齐方式有很多.flex布局的出现基本规范了这一过程. 通过justify-content和align-items两个属性即解决了水平居 ...

  9. activemq的高级特性:消息存储持久化

    activemq的高级特性之消息存储持久化 有基于文件的,数据库的,内存的.默认的是基于文件的,在安装目录/data/kahadb.在conf/activemq.xml文件中. <persist ...

  10. 偏前端 - ios下position:fixed失效的问题解决

    如图,考虑到用户体验的问题,一般页面的下方提交按钮都会随着固定在页面上,方便用户点击. 有些人肯定就说了,这还不简单,position:fixed: 但是在ios这个坑货系统上这个position:f ...