基于cocos2dx的飞机大战学习[五]-添加三种敌机

这节完成了许多的功能:
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 
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值