基于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 ...
随机推荐
- spring cloud各个模块作用
Eureka Client:负责将这个服务的信息注册到Eureka Server中.Eureka Server:注册中心,里面有一个注册表,保存了各个服务所在的机器和端口号.ribbon:负载均衡,获 ...
- 使用java.util.List的subList方法进行分页
java.util.List中有一个subList方法,用来返回一个list的一部分视图. List<E> subList(int fromIndex, int toIndex); 它返回 ...
- Maven下使用Junit对Spring进行单元测试
主要步骤 1. 在工程的pom文件中增加spring-test的依赖: <dependency> <groupId>org.springframework</groupI ...
- 【hdu 3177 Crixalis's Equipment】 题解
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3177 \(describe\): 有一个山洞,山洞的容积最大为\(v\).现在你有\(n\)个物品,这 ...
- 所有流媒体协议,编解码规范和媒体封装格式的datasheet的下载地址
https://github.com/jiayayao/DataSheet All datasheet about stream protocol, encode-decode spec and me ...
- (转)Linux内核基数树应用分析
Linux内核基数树应用分析 ——lvyilong316 基数树(Radix tree)可看做是以二进制位串为关键字的trie树,是一种多叉树结构,同时又类似多层索引表,每个中间节点包含指向多个节点的 ...
- iOS利用block实现链式编程方法(Objective-C链式编程)
objc利用block实现链式编程方法 因为不好读.block和其他语言的匿名函数一样,很多程序员刚开始很难主动去用他. 本文描述block作为属性的实际使用,看懂block,并讲解如何利用block ...
- Ubuntu如何挂载U盘
1. 以root用户登陆 2. 查看当前挂载 fdisk -l 一般情况未挂载的硬盘都在最后,这里是/dev/sdb1 3.新建一个目录来挂载硬盘 挂载到MNT/usb root@h-Default- ...
- Django DTL 加减乘除求余
django模板只提供了加法的filter,没有提供专门的乘法和除法运算: django提供了widthratio的tag用来计算比率,可以变相用于乘法和除法的计算. 加法 {{value|add:1 ...
- WebGl 缩放(矩阵变换)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...