Ejemplo n.º 1
0
/**
 * \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();
  }
}
Ejemplo n.º 2
0
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);
	}
}