最近接触过几个版本的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. 如何寫一個自定義控件/vs2010生成Dll文件并引用dll(C#)

    1.最簡單的例子 首先你先新建->項目->類庫.然後右鍵項目.添加一個用戶控件.設置其用戶控件繼承button. egg: namespace ClassLibrary1{    publ ...

  2. l2-loss,l2正则化,l2范数,欧式距离

    欧式距离: l2范数: l2正则化: l2-loss(也叫平方损失函数): http://openaccess.thecvf.com/content_cvpr_2017/papers/Li_Mimic ...

  3. jquery mobile header title左对齐 button右对齐

    <div data-theme="b" data-role="header" data-position="fixed"> &l ...

  4. Activation Functions

    Sigmoid Sigmoids saturate and kill gradients. Sigmoid outputs are not zero-centered. Exponential fun ...

  5. Oracle 体系结构五

    确定实例是否是RAC数据库的一部分:select parallel from v$instance; 确定数据库是否通过Data Guard备用数据库的保护来防止数据丢失:select protect ...

  6. let与var的区别,为什么什么要用let?

    1.var是全局声明,let是块级作用的,只适用于当前代码块 var a = 1: if(true){ let a; a=22: console.log(a);'//22 } if(){}内就是let ...

  7. 十个常见的Java异常出现原因

    异常是 Java 程序中经常遇到的问题,我想每一个 Java 程序员都讨厌异常,一 个异常就是一个 BUG,就要花很多时间来定位异常问题. 1.NullPointerException 空指针异常,操 ...

  8. 大数据调错系列之hadoop在开发工具控制台上打印不出日志的解决方法

    (1)在windows环境上配置HADOOP_HOME环境变量 (2)在eclipse上运行程序 (3)注意:如果eclipse打印不出日志,在控制台上只显示 1.log4j:WARN No appe ...

  9. android4.4 重启的开机不播放开机铃声,按power键的开机播放开机铃声

    平台:A33Android4.4Linux3.4 功能描述:实现重启的开机不播放开机铃声,按power键的开机播放开机铃声 一,无论关机还是重启都会经过rebootOrShutdown这个方法,在方法 ...

  10. python学习_条件判断语句_if

    #条件判断语句(if)#语法:if条件表达式:语句# 代码块#执行流程:if语句在执行时,会先对条件表达式进行求值判断#如果为True,则执行if后面的语句#如果为False,则不执行#默认情况下,i ...