这节完成了许多的功能:
1、添加小飞机、中等飞机、大飞机。
2、每种飞机的移动速度和血量不同。
3、飞机被子弹打击效果。
4、飞机被摧毁效果。
cocos2d提供的Sprite类不足以提供以上功能,所以我们需要新建一个Enemy类重写Sprite。
Enemy.h代码段
#ifndef __ENEMY_H__
#define __ENEMY_H__
#include "cocos2d.h"
//敌机类型
typedef enum
{
SMALL_ENEMY,
MIDDLE_ENEMY,
BIG_ENEMY
}EnemyType;
class Enemy : public cocos2d::Sprite {
public:
Enemy();
static Enemy* create(EnemyType);
bool init(EnemyType);
//碰撞
void hit();
//摧毁
void down();
EnemyType e_type;
//敌机移动速度
float e_step;
//敌机血量
int e_hp;
};
#endif
这里的e_step、e_hp、e_type我直接public了,可以自行封装。
Enemy.cpp代码段
#include "Enemy.h"
Enemy::Enemy() {
this->e_type = SMALL_ENEMY;
this->e_hp = 0;
}
Enemy* Enemy::create(EnemyType type) {
auto enemy = new Enemy();
if( enemy && enemy->init(type) ) {
enemy->autorelease();
return enemy;
}
delete enemy;
enemy = NULL;
return NULL;
}
//根据不同的敌机建立不同的图片效果
bool Enemy::init(EnemyType type) {
this->e_type = type;
switch (type)
{
case SMALL_ENEMY:
this->e_hp = 1;
this->e_step = 4;
cocos2d::Sprite::initWithSpriteFrameName("enemy1.png");
break;
case MIDDLE_ENEMY:
this->e_hp = 6;
this->e_step = 1;
cocos2d::Sprite::initWithSpriteFrameName("enemy2.png");
break;
case BIG_ENEMY:
this->e_hp = 30;
this->e_step = 0.5f;
cocos2d::Sprite::initWithSpriteFrameName("enemy3_n1.png");
break;
default:
break;
}
return true;
}
//打击效果
void Enemy::hit() {
auto animation = cocos2d::Animation::create();
switch (this->e_type)
{
case MIDDLE_ENEMY:
animation->addSpriteFrame(cocos2d::SpriteFrameCache::getInstance()->
getSpriteFrameByName("enemy2_hit.png"));
animation->addSpriteFrame(cocos2d::SpriteFrameCache::getInstance()->
getSpriteFrameByName("enemy2.png"));
break;
case BIG_ENEMY:
animation->addSpriteFrame(cocos2d::SpriteFrameCache::getInstance()->
getSpriteFrameByName("enemy3_hit.png"));
animation->addSpriteFrame(cocos2d::SpriteFrameCache::getInstance()->
getSpriteFrameByName("enemy3_n1.png"));
break;
default:
break;
}
animation->setDelayPerUnit(0.2f);
auto animate