【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;
}

依据敌机类型,绑定对应的图片和生命值,对于我方飞机。假设想依据生命值来设定不同的飞机样式,也能够通过此类方法。

时间: 2024-11-03 01:24:13

【cocos2d-x 3.7 飞机大战】 决战南海I (三) 敌机实现的相关文章

【cocos2d-x 3.7 飞机大战】 决战南海I (四) 敌机管理

敌方飞机应该不定时的出现,有自己的生命周期.运动轨迹.这个类用来管理敌机的产生.移动.爆炸.销毁等. 敌机管理类主要函数例如以下 //绑定控制器(更新分数) void bindController(Controller* controller); //依据分数决定加入敌机速度 void addSpeed(float dt); // 加入敌机1 void addEnemy1(float dt); // 加入敌机2 void addEnemy2(float dt); // 加入敌机3 void ad

cocos2d中分步实现飞机大战----自己飞机的实现

上一节说了背景的滚动,现在开始布置游戏中自己的飞机,为了使GameScene的代码不至于太多,可以吧自己的飞机进行封装,在GameScene中调用就好.创建Plane: Plane.h: #include "cocos2d.h" USING_NS_CC; class plane:public Node{ public: int hp=100; int px,py; CREATE_FUNC(plane); bool init(); void moveTo(int x,int y); };

cocos2d中分步实现飞机大战----游戏场景中背景的滚动

上一节说了场景的跳转,现在开始布置游戏游戏界面.在游戏的主界面,首先要有游戏背景,为了使GameScene的代码不至于太多,可以吧自己的背景进行封装,在GameScene中调用就好,飞机的正常飞行移动可以用北京的移动来实现.创建BackGround: background.h: #include "cocos2d.h" USING_NS_CC; class background:public Node{ public: CREATE_FUNC(background); bool ini

飞机大战开发04子弹与敌机的碰撞检测

先是敌机与玩家子弹的碰撞检测: 代码: GameLayer.h void GameLayer::update(float dt) { for (int i = 0 ;i < m_pEnermyVec.size();i++) { Sprite * pEne = m_pEnermyVec.at(i) ; for (int j = 0 ; j < m_pPlayerBullet.size();j++ ) { Sprite * pBul = m_pPlayerBullet.at(j) ; if (pE

基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)

最近接触过几个版本的cocos2dx,决定每个大变动的版本都尝试一下.本实例模仿微信5.0版本中的飞机大战游戏,如图: 一.工具 1.素材:飞机大战的素材(图片.声音等)来自于网络 2.引擎:cocos2d-1.0.1-x-0.9.2 3.环境:vs2010 二.使用的类 1.游戏菜单界面类:PlaneWarMenu——派生自CCLayer类. 1 // 游戏菜单界面类 2 class PlaneWarMenu: public CCLayer 3 { 4 public: 5 virtual bo

Cocos2d-x飞机大战教程笔记

咳咳~跟着大神的教程学做Cocos2d-x的飞机大战...鉴于我是那种跟着教程都会出非常多错的人,所以还是一路跟着做些笔记比較好.并且因为是用课余时间,所以仅仅能断断续续地做,写下来也好让自己别忘记~ 2014/4/22  Day01 从apk解压获取素材.再用TexturePacker拼接成plist和png. 话说TexturePacker是收费的啊...7天免费,还能够申请1年的使用期. 之前看书还看到有个神器叫zwoptex,貌似是免费的.可惜仅仅有Mac版...╮(╯_╰)╭Howev

《简单的飞机大战》事实上不简单(1)

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="white-space:pre"> </span>这是一个很easy的<经典飞机大战>游戏.实现的基本功能:包含Boss的随机生成,击中销毁:分数依据击毁Boss的数量添加. 附加功能有:道具的不定时产生,

cocos2d-x-3.3-024-仿微信飞机大战-如何引爆炸弹-实现范围攻击

原文同步发布于我的wiki,查看原文或更新请移步: 点击打开链接 承上文 先回答拓展思考里的问题,'物理引擎可否用来做碰撞检测?',答案是肯定的,具体见下面 cocos2d-x-3.3-019-碰撞检测1-矩形区域是否相交 cocos2d-x-3.3-020-碰撞检测2-物理引擎初探 cocos2d-x-3.3-021-碰撞检测3-物理引擎碰撞过滤 子弹如何杀伤敌人在上面的系列中已经实现.本节要实现的功能点是,继续利用碰撞检测实现飞机大战里炸弹的全屏范围攻击 本文DEMO 基于cocos2d-x

【一】仿微信飞机大战cocos2d-x3.0rc1

參考 [偶尔e网事] 的 [cocos2d-x入门实战]微信飞机大战  cocos2dx 2.0版本号,偶尔e网事他写的很具体,面面俱到,大家很有必要看下.能够通过以下链接跳转: cocos2d-x入门实战 这里面我以[cocos2d-x入门实战]微信飞机大战 为蓝本,用cocos2dx 3.0rc1翻版.安装环境什么的,我就不说了,网上都能够找到,我直接从游戏開始界面说起. 想往下看的话,你必须会的一件事,就是你已经能创建出cocos2dx3.rc1的helloworldproject. 以下