void Scene::update(float deltaTime) { frameNumber++; #if VERBOSE_PERFORMANCE_TIME timeval startTime; if(frameNumber <= 3) gettimeofday(&startTime, NULL); #endif currentTime += deltaTime; #if VERBOSE_GENERAL_INFO CCLOG("Begin scene update"); #endif for(Pausable* obj : updateList) { //CCLOG("Updating object of type: %s", typeid(*obj).name()); obj->update(deltaTime); } #if VERBOSE_GENERAL_INFO CCLOG("scene update: second part"); #endif SceneSwitcher::sharedSwitcher()->trySceneSwitch(deltaTime); if(updatablesToRemove.size() > 0) { //CCLOG("Removing %d updatables", updatablesToRemove->count()); //Manual release for updateList Ref* for(Pausable* obj : updatablesToRemove) { if(isKindOfClass(obj, Ref)) { dynamic_cast<Ref*>(obj)->release(); } } updateList.erase(std::remove_if(updateList.begin(), updateList.end(), [&](Pausable* obj) { return std::find(updatablesToRemove.begin(), updatablesToRemove.end(), obj) != updatablesToRemove.end(); }), updateList.end()); updatablesToRemove.clear(); } if(updatablesToAdd.size() > 0) { //CCLOG("Removing %d updatables", updatablesToAdd->count()); //Manual retain for updateList Ref* for(Pausable* obj : updatablesToAdd) { updateList.push_back(obj); } updatablesToAdd.clear(); } if(receiversToRemove.size() > 0) { //CCLOG("Removing %d updatables", updatablesToRemove->count()); for(GenericRecognizer* recognizer : receiversToRemove) { touchReceiversList.eraseObject(recognizer); } receiversToRemove.clear(); } if(receiversToAdd.size() > 0) { //CCLOG("Removing %d updatables", updatablesToAdd->count()); for(GenericRecognizer* newReceiver : receiversToAdd) { newReceiver->setLinker(linker); } touchReceiversList.pushBack(receiversToAdd); receiversToAdd.clear(); } SynchronousReleaser::sharedReleaser()->emptyReleasePool(); #if VERBOSE_GENERAL_INFO CCLOG("end scene update"); #endif #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) if(frameNumber == 3) { //The first 2 frames are left for scene creation and defered label/image loading runGarbageCollector(); } #endif #if VERBOSE_PERFORMANCE_TIME timeval endTime; if(frameNumber <= 3) { gettimeofday(&endTime, NULL); CCLOG("Frame %d of scene %s loaded in %f ms", frameNumber, formatSceneToString(sceneName), getTimeDifferenceMS(startTime, endTime)); } #endif }
void EventResponder::planSceneSwitch(EventCustom* event) { ValueMap infos = ((Value*)event->getUserData())->asValueMap(); SceneName scene = (SceneName)infos["Scene"].asInt(); AnalyticsWrapper::logPageView(formatSceneToString(scene)); }