// * ------------------------------------------ 重载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)); } }
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)); } } }
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"); } }
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)); } } }
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); } } }
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"); } }