void Enemy::Die() { Plane::Die(); Effect* boom = Effect::Create("boom1"); boom->SetPosition(GetPositionX(), GetPositionY(), GetPositionZ()); boom->SetOrder(LAYER_ENEMY_BOOM); GetScene()->Add(boom); Effect* cool = Effect::Create("cool"); cool->SetColorRGB(rand() % 128 + 128, rand() % 128 + 128, rand() % 128 + 128); cool->ResetVertex(); cool->SetPosition(GetPositionX() + rand() % 21 - 10, GetPositionY() + rand() % 21 - 10, GetPositionZ()); cool->RunAction(Frame2D::Move::Create(2.5, GetPositionX() + 50, GetPositionY())); cool->SetOrder(LAYER_UI_1); GetScene()->Add(cool); // 如果有道具那么掉落道具 if (_itemID != 0) { Item* item = Item::Create(_itemID); item->SetPosition(GetPositionX(), GetPositionY(), GetPositionZ()); item->SetOrder(LAYER_ITEM); GetScene()->Add(item); _itemID = 0; } }
void MainScene::UpdateData(const float& delta) { // 关卡数据更新 StageManager::getInstance()->Update(delta); vector<Element*> list = GetElementList(); for (int i = 0; i < list.size(); ++i) { list.at(i)->SetPositionZ(-list.at(i)->GetOrder() * 2); if (list.at(i)->GetOrder() == LAYER_PLAYER_BULLET || list.at(i)->GetOrder() == LAYER_ENEMY_BULLET) { RECT viewRect = Director::getInstance()->GetViewRect(); D3DXVECTOR3 viewPos = Camera::getInstance()->GetViewPosition(); if (Tools::CheckHit_UnInclude(list.at(i), viewPos.x - viewRect.right / 2.0f, viewPos.y - viewRect.bottom / 2.0f, viewPos.x + viewRect.right / 2.0f, viewPos.y + viewRect.bottom / 2.0f)) { list.at(i)->SetVisible(false); } } else if (list.at(i)->GetOrder() == LAYER_ENEMY_1 || list.at(i)->GetOrder() == LAYER_ENEMY_2 || list.at(i)->GetOrder() == LAYER_ENEMY_3) { RECT viewRect = Director::getInstance()->GetViewRect(); D3DXVECTOR3 viewPos = Camera::getInstance()->GetViewPosition(); if (list.at(i)->GetPositionY() + (0.5f - list.at(i)->GetAnchorY()) * list.at(i)->GetHeight() < viewPos.y + viewRect.bottom / 2.0f && list.at(i)->GetPositionY() - (0.5f - list.at(i)->GetAnchorY()) * list.at(i)->GetHeight() > viewPos.y - viewRect.bottom / 2.0f) { for (int j = 0; j < list.size(); ++j) { if (list.at(j)->GetOrder() == LAYER_PLAYER_BULLET) { if (Tools::CheckHit_Circle(list.at(j), list.at(i)) && ((Enemy*)list.at(i))->GetHp() > 0) { Bullet* bullet = (Bullet*)list.at(j); if (bullet->IsCross() == false) { bullet->Die(); } Enemy* enemy = (Enemy*)list.at(i); enemy->SetHp(enemy->GetHp() - bullet->GetAttack()); enemy->SetBruiseEnable(true); if (enemy->GetHp() <= 0) { enemy->Die(); //分数更新 UserManager* userMgr = UserManager::getInstance(); userMgr->SetScore(userMgr->GetScore() + enemy->GetScore()); enemy->SetScore(0); _scoreText->SetText("SCORE:" + to_string(userMgr->GetScore())); if (enemy->GetName().substr(0, 4).compare("boss") == 0) { if (userMgr->GetStage() < userMgr->GetStageMax()) { userMgr->SetStage(userMgr->GetStage() + 1); if (_black == 0) { _black = Sprite::Create("Res/Login/black.png"); _black->SetScale(500); Add(_black); ClearUpdateFunc(); AddUpdateFunc(UpdateFunc::Create(CALLBACK_PARAMETER_1(MainScene::Fade, this))); AudioManager::getInstance()->stopBGM(); AudioManager::getInstance()->playSoundEffect("Sound/se/clear.mp3"); return; } } else { } } } else { Effect* boom = Effect::Create("fire1"); boom->SetTextureBlend(true); boom->SetPosition(bullet->GetPositionX(), bullet->GetPositionY(), bullet->GetPositionZ()); boom->SetOrder(LAYER_ENEMY_BOOM); Add(boom); AudioManager::getInstance()->playSoundEffect("Sound/se/beiji.ogg"); } } } } } else if (Tools::CheckHit_UnInclude(list.at(i), viewPos.x - viewRect.right / 2.0f - 300, viewPos.y - viewRect.bottom / 2.0f - 300, viewPos.x + viewRect.right / 2.0f + 300, viewPos.y + viewRect.bottom / 2.0f + 300)) { list.at(i)->SetVisible(false); } } else if (list.at(i)->GetOrder() == LAYER_PLAYER) { for (int j = 0; j < list.size(); ++j) { if (list.at(j)->GetOrder() == LAYER_ENEMY_BULLET) { if (Tools::CheckHit_Point(list.at(j), list.at(i))) { Bullet* bullet = (Bullet*)list.at(j); if (bullet->IsCross() == false) { bullet->Die(); } Own* own = (Own*)list.at(i); if (own->GetBulletLevel() > 1) { if (rand() % 2 == 1) { own->SetBulletLevel(own->GetBulletLevel() - 1); } } else { own->SetHp(own->GetHp() - bullet->GetAttack()); } own->SetBruiseEnable(true); if (own->GetHp() <= 0) { //Director::getInstance()->SetPause(true); } } } else if (list.at(j)->GetOrder() == LAYER_ITEM) { if (Tools::CheckHit_Circle(list.at(j), list.at(i))) { Own* own = (Own*)list.at(i); Item* item = (Item*)list.at(j); own->UseItem(item); item->SetVisible(false); AudioManager::getInstance()->playSoundEffect("Sound/se/get_item.mp3"); } } } } } }