cocos2dx游戏开发——微信打飞机学习笔记(八)——EnemyLayer的搭建
一、创建文件= =
EnemyLayer.h
EnemyLayer.cpp
Ps:我绝对不是在凑字数~。
二、How to do?
(1)一些宏的设定~
enum enemyType //设置好飞机的类型~
{
ENEMY_MIN = 1,
ENEMY_MED,
ENEMY_MAX
}; const int ENEMY_MIN_LIFE = 1; //设置飞机的生命值~
const int ENEMY_MED_LIFE = 7;
const int ENEMY_MAX_LIFE = 20; const int ENEMY_MIN_COUNT = 30; //设置飞机的同时在屏幕的最大数量~
const int ENEMY_MED_COUNT = 10;
const int ENEMY_MAX_COUNT = 5;
(2)发射敌机~
由于那个啥啥啥啥啥,有三种敌机,但是方法就是重复三遍,然后把一些函数合并下,大家可以参考gitHub上的代码,然后我就默默的只将一个实现喽~
先看看有哪些准备的功能~
Vector<Enemy*> _enemyArray1; //存飞机的~
float _minDuration, _maxDuration; //敌机飞过去的时间
CC_SYNTHESIZE(float, _enemy1SpawRate, _enemy1SpawRate); //定义下敌机飞过去的速度~
float _timeSum1; //到时就知道啦~
void initEnemy1(); //初始化enemy1
void spawEnemy1(float dt); //发射enemy1
void spawEnemy(float dt); //这是总的函数,下面就是控制发射3钟不同的飞机
Enemy* getAvailableEnemy(int tag); //从数组中拿出空闲的飞机·
首先就是初始化吧,额,不不,先弄在构造函数初始化一些列的东东~
_minDuration = 2;
_maxDuration = 4;
_enemy1SpawRate = 2.5;
_enemy2SpawRate = 5;
_enemy3SpawRate = 100;
_timeSum1 = 0;
_timeSum2 = 0;
_timeSum3 = 0;
注意有些是实现其他类型飞机所需要的哦~
a、初始化飞机
void EnemyLayer::initEnemy1()
{
for (int i = 0; i < ENEMY_MIN_COUNT; i++)
{
auto enemy1 = Enemy::create();//创建一个Enemy
enemy1->bindSprite(Sprite::createWithSpriteFrameName("enemy1.png"), ENEMY_MIN_LIFE);
this->addChild(enemy1); enemy1->setVisible(false);//主要是初始化,还没有要发射,所以不能看到的说~ enemy1->getSprite()->setTag(ENEMY_MIN);//主要是为了方便后面的函数执行 _enemyArray1.pushBack(enemy1);//放进数组中 }
}
b、发射灰机~
Enemy* EnemyLayer::getAvailableEnemy(int tag)
{
if (tag == ENEMY_MIN) //就是遍历整个数组,找到一个空闲的(即不可见的)就取出来、·
{
for (auto&sp : _enemyArray1)
{
if (!sp->isVisible())
{
return sp;
}
}
return nullptr;
}
else if (tag == ENEMY_MED) //后面是一样的~
{
for (auto&sp : _enemyArray2)
{
if (!sp->isVisible())
{
return sp;
}
}
return nullptr;
}
else
{
for (auto&sp : _enemyArray3)
{
if (!sp->isVisible())
{
return sp;
}
}
return nullptr;
}
}
void EnemyLayer::spawEnemy1(float dt)//发射灰机~~~~~~~~~~
{ auto enemy1 = getAvailableEnemy(ENEMY_MIN);//取得一个空闲的灰机~
if (enemy1)
{
enemy1->setLife(ENEMY_MIN_LIFE); //由于以后可能没打死,但是血扣了,所以每次都要补满血~
//下面这段是计算飞机从哪里出现的~大家可以理解理解~
Size enemy1Size = enemy1->getSprite()->getContentSize();
Size visibleSize = Director::getInstance()->getVisibleSize();
int minX = enemy1Size.width / 2;
int maxX = visibleSize.width - enemy1Size.width / 2;
int rangeX = maxX - minX;
int actualX = (rand() % rangeX) + minX; enemy1->setPosition(ccp(actualX, visibleSize.height + enemy1Size.height / 2));
enemy1->setVisible(true);
//这个其实主要是一个随机的速度,毕竟飞机不能总是一样快吧~~~~
int rangeDuration = _maxDuration - _minDuration;
float actualDuration = CCRANDOM_0_1()*rangeDuration + _minDuration; auto actionMove = MoveBy::create(actualDuration, Vec2(0, enemy1->getSprite()->getPositionY() - visibleSize.height - enemy1Size.height));
auto actionDone = Hide::create(); auto action = Sequence::createWithTwoActions(actionMove, actionDone);
//这里的意思就是执行这个动作:从上往下飞过去,如果飞出屏幕就隐藏~。
enemy1->runAction(action);
}
}
void EnemyLayer::spawEnemy(float dt)
{
//没错_enemy1SpawRate就是用来控制游戏难度的~当然上面的发射速度也是可以的~,但是我偷懒就用下面这个来了
//就是计时,每到_enemy1SpawRate后发射出去·
_timeSum1 += dt; if (_timeSum1 >= _enemy1SpawRate)
{
_timeSum1 = 0;
this->spawEnemy1(dt);
} }
上面三个函数完成之后,那就可以在Init()中加入下面的代码~
this->initEnemy1();
this->schedule(schedule_selector(EnemyLayer::spawEnemy), 1.0/60);
c、加到GameScene之后,就可以默默欣赏效果图~

然后,EnemyLayer的简单搭建就到这里啦~.
cocos2dx游戏开发——微信打飞机学习笔记(八)——EnemyLayer的搭建的更多相关文章
- cocos2dx游戏开发——微信打飞机学习笔记(三)——WelcomeScene的搭建
一.场景与层的关系: cocos2dx的框架可以说主要由导演,场景,层,精灵来构成: 1.其中导演,意如其名,就是操控整个游戏的一个单例,管理着整个游戏. 2.场景就像电影的一幕剧情,所以说,懂得如何 ...
- cocos2dx游戏开发——微信打飞机学习笔记(七)——Enemy的搭建
一.文件创建~ Enemy.h Enemy.cpp 二.How to do? 由于我是已经完成成个游戏的功能,所以我会将游戏中enemy所需要的很多功能基本上都先考虑到了,如果大家自己在做的时候也许没 ...
- cocos2dx游戏开发——微信打飞机学习笔记(一)——开发准备
一.环境的搭建 1.Windows开发准备: (1)软件下载及安装 •下载Cocos2d-x 最新版本:http://www.cocos2d-x.org/download 或者从Cocos2d-x G ...
- cocos2dx游戏开发——微信打飞机学习笔记(九)——BulletLayer的搭建
一.创建文件~ BulletLayer.h BulletLayer.cpp 二.How to do? (1)实例化BulletLayer方法的实现~ Bullet(PlayerLayer* temp) ...
- cocos2dx游戏开发——微信打飞机学习笔记(五)——BackgroundLayer的搭建
一.创建文件~ 文件名:BackgroundLayer.h BackgroundLayer.cpp 架构就跟前面的一样,我就直接进入正题 啦,而且github有完整代码,欢迎下载~ 二.创建滚动的背景 ...
- cocos2dx游戏开发——微信打飞机学习笔记(十)——碰撞检测的搭建
一.七说八说 大家都发现了= =,做了那么多,发现就是摆设,完全没有打飞机的感觉,没有实现碰撞的监测.比如说呢,子弹和敌机,玩家与敌机就是需要有碰撞检测的说,然后在这篇我想会很长很长的教 ...
- cocos2dx游戏开发——微信打飞机学习笔记(二)——游戏框架
一.游戏的基本框架: WelcomeScene ——> GameScene ——> GameOverScene || ...
- cocos2dx游戏开发——微信打飞机学习笔记(六)——PlayerLayer的搭建
一.创建文件~ PlayerLayer.h PlayerLayer.cpp 一般类名都会和文件名有关系的~(在这里当然是一样) 二.How to do? 1.首先就是放一个飞机~ CC_SYNTHES ...
- cocos2dx游戏开发——微信打飞机学习笔记(四)——GameScene的搭建
一.创建文件 首先呢,就是那个创建新的.h 和 .cpp 的文件,然后可以起名为GameScene 最重要的就是一定要创建在Classes的目录下哦= =,别手抖= =. 二.GameScene.h和 ...
随机推荐
- 数字、大写字母、小写字母,谁的ASCII码最大?
常见ASCII码的大小规则:0~9<A~Z<a~z几个常见字母的ASCII码大小: “A”为65:“a”为97:“0”为 48.
- LiLinux系统下如何修改主机名
1,用root用户登录,或者切换root用户,先查看当前的主机名:hostname (如果之前没有修改过,一般默认为localhost.localdomain): 2,vi /etc/sysconf ...
- C++ 四种强制类型转换
来自csdn:http://blog.csdn.net/hgl868/article/details/46619399 C风格的强制类转换(Type Cast)很简单,不管什么类型的转换统统是: TY ...
- matlab 之cov 协方差
COV 1.cov(x) 如果x为向量,返回x的方差 计算方法为: S为方差. 2.cov(X) 如果X为矩阵,把矩阵X的行作为观察值,把列作为变量,返回X的协方差矩阵: diag(cov(X))是每 ...
- 破解LR时,解决loadrunner 破解错误:license security violation.Operation is not allowed
一.由于在压力测试执行中,出现一个-10803的错误 ,为解决这个错误,重新设置的环境变量,在次执行错误,这个问题解决了,但另外一个问题出来了,LR,打开脚本编辑器老提示找不到TEMP目录,当时没有想 ...
- java笔记--反射进阶之总结与详解
一.反射进阶之动态设置类的私有域 "封装"是Java的三大特性之一,为了能更好保证其封装性,我们往往需要将域设置成私有的, 然后通过提供相对应的set和get方法来操作这个域.但是 ...
- Unity 3D 粒子系统的一点经验
http://hunterwang.diandian.com/post/2012-10-21/40041523890 最近做东西需要增加效果,简单的运用了一下粒子效果,真心感觉比较难调整好效果.同时也 ...
- hiho #1283 hiho密码 [Offer收割]编程练习赛3
#1283 : hiho密码 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho根据最近在密码学课上学习到的知识,开发出了一款hiho密码,这款密码的秘钥是这样生成的 ...
- WPF 样式和行为
样式(style):组织和重用格式化选项的重要工具,将细节如边距.字体.字号等信息封装起来,然后再需要的地方通过属性来应用样式. 行为(behavior):封装一些通用的UI行为,如拖动,缩放元素的代 ...
- linux下proc里关于磁盘性能的参数
我 们在磁盘写操作持续繁忙的服务器上曾经碰到一个特殊的性能问题.每隔 30 秒,服务器就会遇到磁盘写活动高峰,导致请求处理延迟非常大(超过3秒).后来上网查了一下资料,通过调整内核参数,将写活动的高峰 ...