示例#1
0
// * ------------------------------------------ 重载Attack -------------------------------------- *
void Hero::runAttackAction()
{
    if (changeState(ACTION_STATE_ATTACK))
    {
        // 检测路径贝赛尔的控制点和终点
        auto winSize = Director::getInstance()->getWinSize();

        if (d == 1) {
            auto vector = Point(winSize.width / 10, (winSize.width / 10)*tan(rotateRadians)) * power;
            auto x = vector.x;
            auto y = vector.y;
            Point endPoint = Vec2(4 * x, -this->convertToWorldSpace(Vec2(4 * x, y > 0 ? 0 : std::abs(y * 10))).y);
            Point q = Point(2 * x, y * 2);
            bezier.controlPoint = q;
            bezier.endPosition = endPoint;
        }
        else if (d == 2)
        {
            auto vector = Point(winSize.width / 10, (winSize.width / 10)*tan(-rotateRadians)) * power;
            auto x = vector.x;
            auto y = vector.y;
            Point endPoint = Vec2(-4 * x, -this->convertToWorldSpace(Vec2(-4 * x, y > 0 ? 0 : std::abs(y * 10))).y);
            Point q = Point(-2 * x, y * 2);
            bezier.controlPoint = q;
            bezier.endPosition = endPoint;
        }

        isRunAttackAction = true;
        auto funcall1 = CallFunc::create(CC_CALLBACK_0(Hero::shootArrow, this));
        auto funcall2 = CallFunc::create(CC_CALLBACK_0(Hero::finishRunAction, this));
        auto delayTime = DelayTime::create(0.5f);
        this->runAction(getAttackAction());
        this->runAction(Sequence::create(funcall1, delayTime, funcall2, NULL));
    }
}
示例#2
0
void  Tower_Cuttle::sync_Attack(Vec2 pos, int width)
{
	
	sync_buttle();

	++count;
	if (count > attackSpeed)
	{
		count = 0;
		/*·¢ÉäÅÚµ¯*/
		//	if (target->hp_now<=0)return;
		SimpleAudioEngine::getInstance()->playEffect("Music/Tower/Cuttle.mp3");

		sprite->runAction(getAttackAction());
		if (level == 1)
		{
			bullet_queue.push_back(new  Tower_Cuttle_Bullet(this->level, sprite->getParent(), 0, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Cuttle_Bullet(this->level, sprite->getParent(), 90, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Cuttle_Bullet(this->level, sprite->getParent(), 180, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Cuttle_Bullet(this->level, sprite->getParent(), 270, sprite->getPosition(), pos));

		}
		else if(level==2)
		{
			
			bullet_queue.push_back(new  Tower_Cuttle_Bullet(this->level, sprite->getParent(), 0, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Cuttle_Bullet(this->level, sprite->getParent(), 45, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Cuttle_Bullet(this->level, sprite->getParent(), 90, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Cuttle_Bullet(this->level, sprite->getParent(), 135, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Cuttle_Bullet(this->level, sprite->getParent(), 180, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Cuttle_Bullet(this->level, sprite->getParent(), 225, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Cuttle_Bullet(this->level, sprite->getParent(), 270, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Cuttle_Bullet(this->level, sprite->getParent(), 315, sprite->getPosition(), pos));

		}
		else
		{
			bullet_queue.push_back(new  Tower_Cuttle_Bullet(this->level, sprite->getParent(), 0, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Cuttle_Bullet(this->level, sprite->getParent(), 30, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Cuttle_Bullet(this->level, sprite->getParent(), 60, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Cuttle_Bullet(this->level, sprite->getParent(), 90, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Cuttle_Bullet(this->level, sprite->getParent(), 120, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Cuttle_Bullet(this->level, sprite->getParent(), 150, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Cuttle_Bullet(this->level, sprite->getParent(), 180, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Cuttle_Bullet(this->level, sprite->getParent(), 210, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Cuttle_Bullet(this->level, sprite->getParent(), 240, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Cuttle_Bullet(this->level, sprite->getParent(), 270, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Cuttle_Bullet(this->level, sprite->getParent(), 300, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Cuttle_Bullet(this->level, sprite->getParent(), 330, sprite->getPosition(), pos));

		}


	}

}
示例#3
0
void  Tower_Pin::sync_Attack(Vec2 pos, int width)
{
	/*¸úËæÐýתÔ˶¯*/


	for (vector<TowerBullet_UI*>::iterator it = bullet_queue.begin(); it != bullet_queue.end();)
	{/*¼ì²âÊÇ·ñÅöײ*/

		if ((*it)->isDone == true)
		{
			target->beenAttacked((*it)->damage);
			//target->runBottleBoomAction();
			target->set_effect_last_damage(level);


			(*it)->Destory(0);

			bullet_queue.erase(it);
			it = bullet_queue.begin();
		}
		else
		{
			++it;
		}
	}


	float rot = PublicFunc::getRotation(pos, sprite->getPosition());




	sprite->setRotation(rot);



	++count;
	if (count > attackSpeed)
	{
		count = 0;
		/*·¢ÉäÅÚµ¯*/
		//	if (target->hp_now<=0)return;

		sprite->runAction(getAttackAction());
		bullet_queue.push_back(new  Tower_Pin_Bullet(this->level, sprite->getParent(), rot, sprite->getPosition(), pos));
		SimpleAudioEngine::getInstance()->playEffect("Music/Tower/Pin.mp3");

	}

}
示例#4
0
void  Tower_Arrow::sync_Attack(Vec2 pos, int width)
{
	
	float rot = PublicFunc::getRotation(pos, sprite->getPosition());
	sprite->setRotation(rot);

	sync_buttle();

	++count;
	if (count > attackSpeed)
	{
		count = 0;
		/*·¢ÉäÅÚµ¯*/
		//	if (target->hp_now<=0)return;

		SimpleAudioEngine::getInstance()->playEffect("Music/Tower/Arrow.mp3");




		sprite->runAction(getAttackAction());
		if (level == 1)
		{
			bullet_queue.push_back(new  Tower_Arrow_Bullet(this->level, sprite->getParent(), rot-15, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Arrow_Bullet(this->level, sprite->getParent(), rot+15, sprite->getPosition(), pos));

		}
		else if(level==2)
		{

			bullet_queue.push_back(new  Tower_Arrow_Bullet(this->level, sprite->getParent(), rot-25, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Arrow_Bullet(this->level, sprite->getParent(), rot, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Arrow_Bullet(this->level, sprite->getParent(), rot+25, sprite->getPosition(), pos));
		}
		else
		{
			bullet_queue.push_back(new  Tower_Arrow_Bullet(this->level, sprite->getParent(), rot - 30, sprite->getPosition(), pos));

			bullet_queue.push_back(new  Tower_Arrow_Bullet(this->level, sprite->getParent(), rot - 15, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Arrow_Bullet(this->level, sprite->getParent(), rot, sprite->getPosition(), pos));
			bullet_queue.push_back(new  Tower_Arrow_Bullet(this->level, sprite->getParent(), rot + 15, sprite->getPosition(), pos));

			bullet_queue.push_back(new  Tower_Arrow_Bullet(this->level, sprite->getParent(), rot + 30, sprite->getPosition(), pos));

		}


	}

}
示例#5
0
void  Tower_Ball::sync_Attack(Vec2 pos, int width)
{
	sprite_bullet_effect->setVisible(true);

	
	float rot = PublicFunc::getRotation(pos, sprite->getPosition());


	sprite_bullet_effect->setRotation(rot);

	sprite_bullet_effect->setScaleY(
		PublicFunc::cacl_distance(pos, sprite->getPosition())
		/ sprite_bullet_effect->getContentSize().height);

	++count;
	if (count > attackSpeed)
	{
		count = 0;
		/*иб╔С┼┌х»*/
		sprite->runAction(getAttackAction());
		if (target)
		{
			target->runBallBoomAction();
			SimpleAudioEngine::getInstance()->playEffect("Music/Tower/Ball.mp3");
			int damage;
			switch (this->level)
			{
			case 1: damage = 32; break;
			case 2: damage = 64; break;
			case 3: damage = 90; break;
			}

			target->beenAttacked(damage);
		}
	}

}
示例#6
0
void  Tower_BlueStar::sync_Attack(Vec2 pos, int width)
{
	/*¸úËæÐýתÔ˶¯*/

	for (vector<TowerBullet_UI*>::iterator it = bullet_queue.begin(); it != bullet_queue.end();)
	{/*¼ì²âÊÇ·ñÅöײ*/

		if ((*it)->isDone == true)
		{
	
			auto x = *it;
			bullet_queue.erase(it);
			it = bullet_queue.begin();
			target->beenAttacked(x->damage*0.5);

			/*¼ì²â¸½½ü¹ÖÎï*/	
			Scene_UI*sce = (Scene_UI*)sprite->getParent();
			target->runBlueStarBoomAction();

			for (int i = 0;i<sce->monster_queue.size();i++)
			{
				if (160>PublicFunc::cacl_distance(target->sprite->getPosition(), sce->monster_queue[i]->sprite->getPosition()))
				{
					

					if (target->is_Bonus == true && sce->monster_queue[i]->is_Bonus == false)
					{
						continue;
					}
					if (target->is_Bonus == false && sce->monster_queue[i]->is_Bonus == true)
					{
						continue;
					}
					sce->monster_queue[i]->beenAttacked((x)->damage*0.5);
					sce->monster_queue[i]->set_effect_slow_Blue(level);
					
				}
			}

			

			(x)->Destory(target);


		}
		else
		{
			++it;
		}
	}

	float rot = PublicFunc::getRotation(pos, sprite->getPosition());




	++count;
	if (count > attackSpeed)
	{
		count = 0;
		/*·¢ÉäÅÚµ¯*/
		//	if (target->hp_now<=0)return;
		sprite->runAction(getAttackAction());
		bullet_queue.push_back(new  Tower_BlueStar_Bullet(this->level, sprite->getParent(), rot, sprite->getPosition(), pos));

		SimpleAudioEngine::getInstance()->playEffect("Music/Tower/PStar.mp3");


	}

}