基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)
最近接触过几个版本的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的飞机大战游戏开发实例(上)的更多相关文章
- 基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(中)
接<基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)> 三.代码分析 1.界面初始化 bool PlaneWarGame::init() { bool bRet = fals ...
- 基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(下)
在飞机大战游戏开发中遇到的问题和解决方法: 1.在添加菜单时,我要添加一个有背景的菜单,需要在菜单pMenu中添加一个图片精灵,结果编译过了但是运行出错,如下图: 查了很多资料,调试了很长时间,整个人 ...
- 基于Cocos2d-x-1.0.1的飞机大战游戏迁移到Cocos2d-x-3.0版本,并移植到Android平台成功运行
一.版本迁移中的问题 1.游戏元素Sprite.Label.Action等等的创建函数名都改为create. 2.函数的回调callfunc_selectorcallfuncN_selectorcal ...
- 微信5.0 Android版飞机大战破解无敌模式手记
微信5.0 Android版飞机大战破解无敌模式手记 转载: http://www.blogjava.net/zh-weir/archive/2013/08/14/402821.html 微信5.0 ...
- 11.pygame飞机大战游戏整体代码
主程序 # -*- coding: utf-8 -*- # @Time: 2022/5/20 22:26 # @Author: LiQi # @Describe: 主程序 import pygame ...
- "飞机大战"游戏_Java实现_详细注释
1 package cn.xiaocangtian.Util; import java.awt.Frame; import java.awt.Graphics; import java.awt.Ima ...
- 用Javascript模拟微信飞机大战游戏
最近微信的飞机大战非常流行,下载量非常高. 利用JS进行模拟制作了一个简单的飞机大战[此源码有很多地方可以进行重构和优化] [此游戏中没有使用HTML5 任何浏览器都可以运行]. 效果图: 原理:利用 ...
- 一、利用Python编写飞机大战游戏-面向对象设计思想
相信大家看到过网上很多关于飞机大战的项目,但是对其中的模块方法,以及使用和游戏工作原理都不了解,看的也是一脸懵逼,根本看不下去.下面我做个详细讲解,在做此游戏需要用到pygame模块,所以这一章先进行 ...
- "飞机大战"游戏_Java
1 package cn.xiaocangtian.Util; import java.awt.Frame; import java.awt.Graphics; import java.awt.Ima ...
随机推荐
- 【Autoprefixer】Hbuilder中配置Autoprefixer
1.安装node.js 2.安装Autoprefixer 3.安装postcss-cli 4.配置外部工具 打开HBuilder,运行-外部工具-外部工具配置,如图: 新建一个外部工具配置 名称填写a ...
- 4种方法获取select下拉框标签中的值
选中下拉框中“上海” 代码如下:<select id="province" class="select" name="province" ...
- Apollo GPS调试笔记
前言:在Apollo美研团队的支持下,最近完成了Apollo推荐的Novatel PP7与我们的基站调试,在这里对Apollo的笔记做一个补充,希望以后的开发者不用在踩我们踩过的坑. 在自己调导航(h ...
- [LuoguP3668][USACO17OPEN]现代艺术2
[LuoguP3668][USACO17OPEN]Modern Art2(Link) 现在你有一块长为\(N\)的画布,每次可以选择一段连续的区间进行颜色填涂,新颜色会覆盖旧颜色.每一次填涂都要耗费一 ...
- 接口测试Jmeter+Fiddler组合
接口测试Jmeter+Fiddler组合 在使用完Jmeter在做接口测试之后,个人感觉Jmeter比loadrunner好用,原因是界面操作更加直观,不必像loadrunner在写接口请求函数的时候 ...
- linux下安装swoole扩展
一.下载swoole 地址:https://github.com/swoole/swoole-src二.将下载好的压缩包放在linux服务器下三.解压压缩包到任意目录 # unzip swoole-s ...
- oracle数据库——常用的数据类型
2018-12-19 23:08:03 oracle数据库中常用的数据类型有23种,我们把数据类型分为字符型.数字型.日期型和其他数据类型. 一.字符型: 数据类型 取值范围 (字节) 说明 v ...
- win10 切换网卡的bat
@echo off >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system3 ...
- 设置PL/SQL Developer 字符集
本文转自:http://blog.itpub.net/26613085/viewspace-765429/ 适用于:客户端和服务端不一致的情况,或者客户端某个字段的值乱码
- Angular7教程-02-Angular项目目录及基本文件说明
本教程基于Angular7,更新时间2018-11-05. 1. 项目根目录如下: e2e文件夹:end to end,测试目录,主要用于集成测试. node_modules:项目的模块依赖目录. s ...