/** * \brief 检查离线成员状态,删除超时的,恢复上线的 * \param pUser 队长 */ void TeamManager::checkOffline(SceneUser *pUser) { CheckOfflineExec exec(pUser); team.execEvery(exec); if (!exec.del_vec.empty()) { for(CheckOfflineExec::Remove_vec_iterator del_iter=exec.del_vec.begin();del_iter != exec.del_vec.end();del_iter ++) { removeMember(&*del_iter); } exec.del_vec.clear(); if (getSize() == 1) { deleteTeam(); } } if (!exec.add_vec.empty()) { for(CheckOfflineExec::Online_vec_iterator add_iter=exec.add_vec.begin();add_iter !=exec.add_vec.end();add_iter ++) { SceneUser *tuser = SceneUserManager::getMe(). getUserByID(*add_iter); if (tuser) { addNewMember(pUser,tuser); } } exec.add_vec.clear(); } }
void HelloWorld::update(float delta) { if (foodCount >=5) { hasPowerUp = true; foodCount = 0; timer = 10; this->schedule(schedule_selector(HelloWorld::updateTimer), 1.0f); float sizeX = prinny_frames_idle.front()->getOriginalSizeInPixels().width; float sizeY = prinny_frames_idle.front()->getOriginalSizeInPixels().height; float bgSizeX = background->getContentSize().width; float bgSizeY = background->getContentSize().height; powerUp = Sprite::createWithSpriteFrame(prinny_frames_idle.front()); powerUp->runAction(prinny_idle); background->addChild(powerUp); powerUp->setPosition(generateRandomPosition(sizeX, bgSizeX - sizeX, sizeY, bgSizeY - sizeY)); } if (timer <= 0) { hasPowerUp = false; background->removeChild(powerUp, true); this->unschedule(schedule_selector(HelloWorld::updateTimer)); } auto front = line.front(); auto position = front->getPosition(); switch (front->getDirection()) { case 0: position.x -= front->getSpriteFrame()->getOriginalSizeInPixels().width + 1; break; case 1: position.x += front->getSpriteFrame()->getOriginalSizeInPixels().width + 1; break; case 2: position.y += front->getSpriteFrame()->getOriginalSizeInPixels().height + 1; break; case 3: position.y -= front->getSpriteFrame()->getOriginalSizeInPixels().height + 1; break; default: break; } if (CollisionWithDeath()) { game_over_label->setVisible(true); cocos2d::Director::getInstance()->pause(); return; } if (CollisionWithPowerUp()) { hasPowerUp = false; background->removeChild(powerUp, true); this->unschedule(schedule_selector(HelloWorld::updateTimer)); score += 500; score_value_label->setString(std::to_string(score)); cocos2d::Director::getInstance()->getScheduler()->performFunctionInCocosThread(CC_CALLBACK_0(HelloWorld::playRandomPrinnySound, this)); } if (CollisionWithFood()) { float sizeX = prinny_frames_idle.front()->getOriginalSizeInPixels().width; float sizeY = prinny_frames_idle.front()->getOriginalSizeInPixels().height; float bgSizeX = background->getContentSize().width; float bgSizeY = background->getContentSize().height; food->setPosition(generateRandomPosition(sizeX, bgSizeX - sizeX, sizeY, bgSizeY - sizeY)); if (!hasPowerUp) { foodCount++; } cocos2d::Director::getInstance()->getScheduler()->performFunctionInCocosThread(CC_CALLBACK_0(HelloWorld::playRandomPrinnySound, this)); totalFoodCount++; score += 50; score_value_label->setString(std::to_string(score)); addNewMember(); if (totalFoodCount % 3 == 0) { auto interval = 10 + totalFoodCount/3; cocos2d::Director::getInstance()->setAnimationInterval(1.0 / interval); level++; level_value_label->setString(std::to_string(level)); } } else{ for (int i = line.size() - 1; i >= 1; i--) { auto prev = line.at(i - 1); auto curr = line.at(i); if (prev->getDirection() != curr->getDirection()) { auto new_dir = prev->getDirection(); switch (new_dir) { case 0: curr->setDirection(new_dir, RepeatForever::create(Animate::create(Animation::createWithSpriteFrames(prinny_frames_left, 1.0f / 8)))); break; case 1: curr->setDirection(new_dir, RepeatForever::create(Animate::create(Animation::createWithSpriteFrames(prinny_frames_right, 1.0f / 8)))); break; case 2: curr->setDirection(new_dir, RepeatForever::create(Animate::create(Animation::createWithSpriteFrames(prinny_frames_up, 1.0f / 8)))); break; case 3: curr->setDirection(new_dir, RepeatForever::create(Animate::create(Animation::createWithSpriteFrames(prinny_frames_down, 1.0f / 8)))); break; default: break; } } curr->setPosition(prev->getPosition()); } front->setPosition(position); } }