bool EnemyTest::init()
{
	if (!Sprite::init())
	{
		return false;
	}
	instance = GameManager::getInstance();

	sprite = Sprite::create("monster/monster1/right1.png"); //怪物本身的图片,初始化显示
	addChild(sprite);
	
	iceSprite = Sprite::create("ice.png"); //冰块图片
	iceSprite->setPosition(sprite->getPosition());
	addChild(iceSprite, 2);
	iceSprite->setVisible(false);

	setType(1);//这是第一种敌人
	setIsVisible(true);
	setRunSpeed(3);
	setHpPercentage(100);
	setMoney(2);//只值2元钱
	animationRight = createAnimation("monster/monster1/right", 4, 0.1f,95,84);
	AnimationCache::getInstance()->addAnimation(animationRight, "monster1_right");  //这个cache里存有各种做好的动画,重要,以便后来取出用动画
	animationLeft = createAnimation("monster/monster1/left", 4, 0.1f,95,84);
	AnimationCache::getInstance()->addAnimation(animationLeft, "monster1_left");
	

	createAndSetHpBar();

	schedule(schedule_selector(EnemyTest::changeDirection), 0.4f);
	schedule(schedule_selector(EnemyTest::deFroze), 0.2f); //每隔0.2秒执行一次检测是否减速函数

	////设置schduler来减缓敌人速度
	//CCScheduler *defaultScheduler = CCDirector::sharedDirector()->getScheduler();
	//// Create a new scheduler, and link it to the main scheduler
	//sched1 = new CCScheduler();
	//defaultScheduler->scheduleUpdateForTarget(sched1, 0, false);
	//// Create a new ActionManager, and link it to the new scheudler
	//actionManager1 = new CCActionManager();
	//sched1->scheduleUpdateForTarget(actionManager1, 0, false);
	//// Replace the default ActionManager with the new one.
	//this->setActionManager(actionManager1);

	return true;
}
bool EnemyDisableTower::init() /*override*/
{
	if (!Sprite::init())
	{
		return false;
	}
	instance = GameManager::getInstance();

	sprite = Sprite::create("monster/monster_disable_tower/right1.png"); //怪物本身的图片,初始化显
	addChild(sprite);

	iceSprite = Sprite::create("ice.png"); //冰块图片
	iceSprite->setPosition(sprite->getPosition());
	addChild(iceSprite, 2);
	iceSprite->setVisible(false);

	disableRing = Sprite::create("disableRing.png");
	disableRing->setScale(2);
	addChild(disableRing, 10);
	auto fo = FadeOut::create(1);
	disableRing->runAction(RepeatForever::create(Sequence::create(fo, fo->reverse(), NULL)));

	setType(3);//这是第3种敌人
	setIsVisible(true);//不是隐形单位
	setRunSpeed(4);
	setHpPercentage(100);
	setMoney(8);//只值4元钱
	animationRight = createAnimation("monster/monster_disable_tower/right", 4, 0.1f, 100, 100);
	AnimationCache::getInstance()->addAnimation(animationRight, "monster_disable_right");  //这个cache里存有各种做好的动画,重要,以便后来取出用动画
	animationLeft = createAnimation("monster/monster_disable_tower/left", 4, 0.1f, 100, 100);
	AnimationCache::getInstance()->addAnimation(animationLeft, "monster_disable_left");


	createAndSetHpBar();

	schedule(schedule_selector(EnemyDisableTower::changeDirection), 0.4f);
	schedule(schedule_selector(EnemyDisableTower::deFroze), 0.2f); //每隔0.2秒执行一次检测是否减速函数
	//schedule(schedule_selector(EnemyDisableTower::disableNearbyTower), 0.2f);//每隔0.2秒沉默敌人一次,有问题:不能在敌人这判断,要在炮塔那判断才行,否则会图片会闪烁


	return true;
}
Пример #3
0
void PlayLayer::update(float dt)
{
    GameManager *instance = GameManager::getInstance();
    
    auto bulletVector = instance->bulletVector;
    auto enemyVector = instance->enemyVector;
    auto towerVector = instance->towerVector;
    
    if(chooseTowerpanle != NULL )
	{
		auto type = chooseTowerpanle->getChooseTowerType();
		if( type == TowerType::ARROW_TOWER)
        {
			TowerBase* tower = ArrowTower::create();
			tower->setPosition(towerPos);
			this->addChild(tower);
            instance->towerVector.pushBack(tower);
            
			type =  TowerType::ANOTHER;
			chooseTowerpanle->setChooseTowerType(type);
            
		}
	}
    
    Vector<EnemyBase*> enemyNeedToDelete;
	Vector<Sprite*> bulletNeedToDelete;
    // 碰撞检测
    for (int i = 0; i < bulletVector.size(); i++)
	{
		auto  bullet = bulletVector.at(i);
        bullet->boundingBox();
		auto  bulletRect = Rect(bullet->getPositionX()+bullet->getParent()->getPositionX() - bullet->getContentSize().width / 2,
                                bullet->getPositionY() +bullet->getParent()->getPositionY() - bullet->getContentSize().height / 2,
                                bullet->getContentSize().width,
                                bullet->getContentSize().height );
        
		for (int j = 0; j < enemyVector.size(); j++)
		{
			auto enemy = enemyVector.at(j);
			auto enemyRect = enemy->sprite->boundingBox();
            
			if (bulletRect.intersectsRect(enemyRect))
			{
                auto currHp = enemy->getCurrHp();
                currHp--;
                enemy->setCurrHp( currHp );
                
				auto currHpPercentage = enemy->getHpPercentage();
                auto offHp = 100 / enemy->getMaxHp();
				currHpPercentage -= offHp;
                if(currHpPercentage < 0){
                    currHpPercentage = 0;
                }
                enemy->setHpPercentage(currHpPercentage);
				enemy->getHpBar()->setPercentage(currHpPercentage);
                
                if(currHp <= 0)
                {
                    enemyNeedToDelete.pushBack(enemy);
                }
                bulletNeedToDelete.pushBack( bullet);
			}
		}
		for (EnemyBase* enemyTemp : enemyNeedToDelete)
		{
            enemyTemp->enemyExpload();
            instance->enemyVector.eraseObject(enemyTemp);
		}
		enemyNeedToDelete.clear();
	}
	
	for (const auto& bulletTemp : bulletNeedToDelete)
	{
		instance->bulletVector.eraseObject(bulletTemp);
        bulletTemp->removeFromParent();
	}
	bulletNeedToDelete.clear();
}