最近接触过几个版本的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. 日常踩坑——rand()总是出现重复数据

    写了一个生成随机数组的函数,然后跑出来,结果总是…… 然后,很奇怪的是一步一步调试,它就没问题了,WTF??? 问题出在:重复写了srand(time(NULL)),只保留一个就好了. int* ge ...

  2. 【JavaScript】富文本编辑器

    这是js写的富文本编辑器,还存在一些bug,但基本功能已经实现,通过这个练习,巩固了js富文本编辑方面的知识,里面包含颜色选择器.全屏.表情.上传图片等功能,每个功能实际对应的就是一个小插件啦 部分程 ...

  3. [Python 多线程] Barrier (十一)

    Barrier 栅栏,也叫屏障.可以想象成路障.道闸. Python 3.2引入的新功能. 构造方法: threading.Barrier(parties, action=None, timeout= ...

  4. 浅谈MVP架构及开发模式

    Model-View-Presenter(MVP)概述    MVC模式已经出现了几十年了,在GUI领域已经得到了广泛的应用,由于微软ASP.NET MVC Framework的出现,致使MVC一度成 ...

  5. Java java httpclient4.5 进行http,https通过SSL安全验证跳过,封装接口请求 get,post(formdata,json)封装,文件上传下载

    package api; import java.util.*; import java.net.URI; import org.apache.http.Consts; import org.apac ...

  6. 通讯协议(一)HTTP协议

    协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器.目前我们使 ...

  7. PAT——1048. 数字加密

    本题要求实现一种数字加密方法.首先固定一个加密用正整数A,对任一正整数B,将其每1位数字与A的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对13取余——这里用J代表10.Q代表11.K代 ...

  8. CGContextRef 用法总结

    0  CGContextRef context = UIGraphicsGetCurrentContext(); 设置上下文1 CGContextMoveToPoint 开始画线2 CGContext ...

  9. CC2640R2F&TI-RTOS 拿到 TI CC2640R2F 开发板 第三件事就是使用 TI-RTOS 创建 一个任务 和 使用 信号量 超时来闪烁 LED灯

    /* * data_process.c * * Created on: 2018年7月5日 * Author: admin */ #include <ti/sysbios/knl/Task.h& ...

  10. HDU 3695 Computer Virus on Planet Pandora (AC自己主动机)

    题意:有n种病毒序列(字符串),一个模式串,问这个字符串包括几种病毒. 包括相反的病毒也算.字符串中[qx]表示有q个x字符.具体见案列. 0 < q <= 5,000,000尽然不会超, ...