1. 程式人生 > >【cocos2d-x 3.7 飛機大戰】 決戰南海I (三) 敵機實現

【cocos2d-x 3.7 飛機大戰】 決戰南海I (三) 敵機實現

ons sel etl child min ack 自己的 life type

如今來實現敵機類

敵機和我方飛機相似,具有生命值、能夠發射子彈。而且有自己的運動軌跡。事實上能夠為它們設計一個共同的基類,這樣能夠更方便擴展。


不同的敵機,應設置不同的標識、屬性

// 敵機生命值
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;
}


依據敵機類型,綁定對應的圖片和生命值,對於我方飛機。假設想依據生命值來設定不同的飛機樣式,也能夠通過此類方法。




【cocos2d-x 3.7 飛機大戰】 決戰南海I (三) 敵機實現