【cocos2d-x 3.7 飞机大战】 决战南海I (三) 敌机实现
如今来实现敌机类
敌机和我方飞机相似,具有生命值、能够发射子弹。而且有自己的运动轨迹。事实上能够为它们设计一个共同的基类,这样能够更方便扩展。
不同的敌机,应设置不同的标识、属性
// 敌机生命值
const int ENEMY1_MAXLIFE = 1;
const int ENEMY2_MAXLIFE = 2;
const int ENEMY3_MAXLIFE = 5;
const int ENEMY4_MAXLIFE = 10; // 敌机分数
const int ENEMY1_SCORE = 1;
const int ENEMY2_SCORE = 6;
const int ENEMY3_SCORE = 20;
const int ENEMY4_SCORE = 50;
// 敌机类型
enum EnemyType
{
Enemy1 = 1,
Enemy2,
Enemy3,
Enemy4,
};
头文件里的主要函数
void setEnemyByType(EnemyType enType);
Sprite* getSprite(); int getLife();
void loseLife();
Rect getBoundingBox();
函数的实现
void Enemy::setEnemyByType(EnemyType enType)
{
switch (enType)
{
case Enemy1:
pEnemySprite = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy1.png"));
nLife = ENEMY1_MAXLIFE;
break;
case Enemy2:
pEnemySprite = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy2.png"));
nLife = ENEMY2_MAXLIFE;
break;
case Enemy3:
pEnemySprite = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy3.png"));
nLife = ENEMY3_MAXLIFE;
break;
case Enemy4:
pEnemySprite = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy4.png"));
nLife = ENEMY4_MAXLIFE;
break;
default:
return;
break;
} this->addChild(pEnemySprite);
Size winSize = Director::getInstance()->getWinSize();
Size enemySize = pEnemySprite->getContentSize();
int minX = enemySize.width / 2;
int maxX = winSize.width - enemySize.width / 2;
int rangeX = maxX - minX;
int actualX = (rand() % rangeX) + minX; // 设置敌机Node方位 Node包括Sprite
this->setPosition(Point(actualX, winSize.height - enemySize.height / 2));
} bool Enemy::init()
{
bool pRet = true;
if (!Node::init())
{
pRet = false;
} return pRet;
} Sprite* Enemy::getSprite()
{
return pEnemySprite;
} int Enemy::getLife()
{
return nLife;
} void Enemy::loseLife()
{
--nLife;
} Rect Enemy::getBoundingBox()
{
Rect rect = pEnemySprite->boundingBox();
Point pos = this->convertToWorldSpace(rect.origin);
Rect enemyRect(pos.x, pos.y, rect.size.width, rect.size.height);
return enemyRect;
}
依据敌机类型,绑定对应的图片和生命值,对于我方飞机。假设想依据生命值来设定不同的飞机样式,也能够通过此类方法。
【cocos2d-x 3.7 飞机大战】 决战南海I (三) 敌机实现的更多相关文章
- 微信小游戏 demo 飞机大战 代码分析 (三)(spirit.js, animation.js)
微信小游戏 demo 飞机大战 代码分析(三)(spirit.js, animation.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码 ...
- 【cocos2d-x 3.7 飞机大战】 决战南海I (四) 敌机管理
敌方飞机应该不定时的出现,有自己的生命周期.运动轨迹.这个类用来管理敌机的产生.移动.爆炸.销毁等. 敌机管理类主要函数例如以下 //绑定控制器(更新分数) void bindController(C ...
- 微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js)
微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞 ...
- 微信小游戏 demo 飞机大战 代码分析 (二)(databus.js)
微信小游戏 demo 飞机大战 代码分析(二)(databus.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码分析(三)(spirit. ...
- 微信小游戏 demo 飞机大战 代码分析 (一)(game.js, main.js)
微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码分析(二)(databus.js) 微信小游戏 demo 飞机大战 代码分析(三)(spirit. ...
- cocos2dx实现经典飞机大战
游戏开始层 #ifndef __LayerGameStart_H__ #define __LayerGameStart_H__ #include "cocos2d.h" USING ...
- 【一】仿微信飞机大战cocos2d-x3.0rc1
參考 [偶尔e网事] 的 [cocos2d-x入门实战]微信飞机大战 cocos2dx 2.0版本号,偶尔e网事他写的很具体,面面俱到,大家很有必要看下.能够通过以下链接跳转: cocos2d-x入 ...
- 微信5.0 Android版飞机大战破解无敌模式手记
微信5.0 Android版飞机大战破解无敌模式手记 转载: http://www.blogjava.net/zh-weir/archive/2013/08/14/402821.html 微信5.0 ...
- 基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)
最近接触过几个版本的cocos2dx,决定每个大变动的版本都尝试一下.本实例模仿微信5.0版本中的飞机大战游戏,如图: 一.工具 1.素材:飞机大战的素材(图片.声音等)来自于网络 2.引擎:coco ...
随机推荐
- AWT编程时,Button按钮上的中文编程□□□
今天学到AWT编程时,照着书上的代码打,代码如下: import java.awt.*; public class PanelTest{ public static void main(Stri ...
- 迅为iTOP-4418开发板串口虚拟控制台配置为普通串口
如何将 iTOP-4418 的串口控制台配置为普通串口.在最终的产品中,如果需要额外的串口,可以将调试用的控制台串口作为普通串口使用,因为交付给最终用户手中的产品,一般不需要调试串口.屏蔽串口控制台需 ...
- Android(java)学习笔记191:ContentProvider使用之利用ContentProvider备份和还原手机短信(掌握)
1. 通过阅读系统源码我们知道: 短信的内容提供者: content://sms/ 系统短信的内容提供者的路径 2. 利用ContentProvider备份和还原手机短信: (1 ...
- vim 将文件所有行合并到一行
vim 将文件所有行合并到一行 在 Normal Mode下执行: ggvGJ gg 用于跳到行首 v 转换成 visual 模式 G 跳到最后一行 J 合并行
- JS日期,金钱处理
一丶获取两个时间的天数 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...
- A7. JVM 垃圾回收收集器(GC 收集器)
[概述] 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现.Java 虚拟机规范中对垃圾收集器应该如何实现没有任何规定,因此不同的厂商.不同版本的虚拟机所提供的垃圾处理器都可能会 ...
- ArrayList中removeAll和clear的区别(无区别)
removeAll会直接调用此方法,传入list和false,因中间的逻辑都不会走(如果由retainAll方法调用,则会走这些逻辑判断),所以只需要看finaly中的最后一个if条件,w=0,通过循 ...
- js中事件冒泡和事件捕获
什么时候存在这种问题? 当一个行为触发了多个对象的事件时. <body> <div class="fa"> <div class=&q ...
- 利用Merge into 改写Update SQL 一例
前言 客户说,生产系统最近CPU使用率经常达到100%,请DBA帮忙调查一下. 根据客户提供的情况描述及对应时间段,我导出AWR,发现如下问题: 11v41vaj06pjd :每次执行消耗2,378, ...
- 微信小程序 设置计时器(setInterval)、清除计时器(clearInterval)
1.wxml代码 <!--index.wxml--> <view class="container"> <button type='primary' ...