本文主要是介绍基于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
这篇关于基于cocos2dx的飞机大战学习[五]-添加三种敌机的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!