void SpriteSystem::enemyAttack(float dt) { for(uint i = 0; i < m_vEnemys.size(); i++) { BaseSprite* enemy = m_vEnemys.at(i); if(enemy->getSpriteState() != SPRITESTATE_DEAD)//如果没有死亡 { m_fAttackElapseTime[i] += dt;//更新时间 if (m_fAttackElapseTime[i] >= enemy->getSpConf().attackSpeed)//怪物达到攻击时间 { m_fAttackElapseTime[i] = 0;//计时归零 enemy->startAction(SPRITESTATE_ATTACK);//攻击动作 //判断弹道 if (enemy->getSpConf().type != SPRITETYPE_FRONT)//不是前排人物 { int magicId = enemy->getSpConf().magicGroup.magic1; // Magic* magic = m_vMagics.at(magicId);//这样多个英雄释放同一种技能时会重复addChild。 Magic* magic = Magic::create(m_magConf[magicId]); magic->startMagic(enemy, enemy->getTargetSp(), 0.8); magic->setFlippedX(true);//怪物攻击特效翻转 this->addChild(magic,2); } else { //随机攻击力 int randAttack = enemy->getSpConf().attackMin + rand()%(enemy->getSpConf().attackMax - enemy->getSpConf().attackMin); //更新生命值 enemy->getTargetSp()->setCurLife(enemy->getTargetSp()->getCurLife() - randAttack); } if(enemy->getTargetSp()->getCurLife() <= 0) { enemy->getTargetSp()->startAction(SPRITESTATE_DEAD);//没有移除 long index = m_vHeros.getIndex(enemy->getTargetSp()); m_itItem[index]->setEnabled(false);//禁用技能按钮 //改变攻击对象 setAttackTarget(); } if (enemy->getCurPower() < enemy->getSpConf().power) { enemy->setCurPower(enemy->getCurPower() + 1);//怒气+1 } else { // enemy->setIsMagic(true);//允许释放魔法 //直接释放技能(大招) enemy->startAction(SPRITESTATE_MAGIC); } } } } }
void SpriteSystem::update(float dt) { m_fBeginElaseTime += dt;//记录游戏开始多久后可以攻击,时间取决于怪物跑动的时间 if (m_fBeginElaseTime >= __RUN_ACTION_TIME &&GameManager::getInstance()->isGameOver == false)//4秒后允许攻击 { enemyAttack(dt); } //显示技能按钮 for (unsigned int i = 0; i < m_vHeros.size(); i++) { BaseSprite* hero = m_vHeros.at(i); if (hero->getSpriteState() != SPRITESTATE_DEAD) { this->showLifeButton(hero); this->showPowerButton(hero); } } //更新敌人生命值 for (unsigned int i = 0; i < m_vEnemys.size(); i++) { BaseSprite* enemy = m_vEnemys.at(i); if (enemy->getSpriteState() != SPRITESTATE_DEAD) { showLifeTop(enemy); } } switch (gameResult()) { case 0://未完成 break; case 1://胜利 { unscheduleUpdate(); //给PlayLayer发信号 Message* msg = Message::instance(); msg->setMesType(Message_GameSuccess_); PlayLayer::s_messageQ->push(msg); //人物动画效果 //添加一个层 OverScene* overScene = OverScene::create(1); this->addChild(overScene,100); } break; case 2://失败 { unscheduleUpdate(); //给PlayLayer发信号 Message* msg = Message::instance(); msg->setMesType(Message_GameFailed_); PlayLayer::s_messageQ->push(msg); //人物动画效果 //添加一个层 OverScene* overScene = OverScene::create(2); this->addChild(overScene,100); } break; default: break; } }