当前位置:
首页 >
Cocos2d-x和时间有关的代码
发布时间:2025/7/14
53
豆豆
生活随笔
收集整理的这篇文章主要介绍了
Cocos2d-x和时间有关的代码
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
用cocos2d-x获取系统时间,格式为年月日时分秒:
void GetTime(float dt){struct tm *tm; #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) //win32平台 time_t timep; time(&timep); tm = localtime(&timep); #else //android、ios平台struct cc_timeval now; CCTime::gettimeofdayCocos2d(&now, NULL);tm = localtime(&now.tv_sec); #endif int year = tm->tm_year + 1900;int month = tm->tm_mon + 1;int day = tm->tm_mday;int hour=tm->tm_hour;int min=tm->tm_min;int second=tm->tm_sec; }
实现游戏倒计时的代码:
在CCDirector中有个getScheduler()得到时刻表【调度者】,我们可以使用时刻表【调度者】CCScheduler,来暂停所有的调度。在CCScheduler暂停所有的调度是这样子的:
CCScheduler.h
/** Pause all selectors from all targets. You should NEVER call this method, unless you know what you are doing. //提示我们不应该调用此方法,但是目前我测试中没有出现什么问题 @since v2.0.0 */ CCSet* pauseAllTargets();
CCSchedule.cpp
CCSet* CCScheduler::pauseAllTargets() { return pauseAllTargetsWithMinPriority(kCCPrioritySystem); }CCSet* CCScheduler::pauseAllTargetsWithMinPriority(int nMinPriority) { CCSet* idsWithSelectors = new CCSet();// setWithCapacity:50]; idsWithSelectors->autorelease(); // Custom Selectors for(tHashSelectorEntry *element = m_pHashForSelectors; element != NULL; element = (tHashSelectorEntry*)element->hh.next) { element->paused = true; idsWithSelectors->addObject(element->target); }// Updates selectors tListEntry *entry, *tmp; if(nMinPriority < 0) { DL_FOREACH_SAFE( m_pUpdatesNegList, entry, tmp ) { if(entry->priority >= nMinPriority) { entry->paused = true; idsWithSelectors->addObject(entry->target); } } }if(nMinPriority) paused = true;idsWithSelectors->addObject(entry->target);}}DL_FOREACH_SAFE( m_pUpdatesPosList, entry, tmp ){if(entry->priority >= nMinPriority){entry->paused = true;idsWithSelectors->addObject(entry->target);}}return idsWithSelectors;}
暂停之后,我们再次执行的时候需要恢复,方法如下:
CCScheduler.h
/** Resumes the target.The 'target' will be unpaused, so all schedule selectors/update will be 'ticked' again.If the target is not present, nothing happens.@since v0.99.3*/void resumeTarget(CCObject *pTarget);/** Resume selectors on a set of targets.This can be useful for undoing a call to pauseAllSelectors.@since v2.0.0*/void resumeTargets(CCSet* targetsToResume);
CCScheduler.cpp
void CCScheduler::resumeTarget(CCObject *pTarget){CCAssert(pTarget != NULL, "");// custom selectors tHashSelectorEntry *pElement = NULL;HASH_FIND_INT(m_pHashForSelectors, &pTarget, pElement);if (pElement){pElement->paused = false;}// update selector tHashUpdateEntry *pElementUpdate = NULL;HASH_FIND_INT(m_pHashForUpdates, &pTarget, pElementUpdate);if (pElementUpdate){CCAssert(pElementUpdate->entry != NULL, "");pElementUpdate->entry->paused = false;}}void CCScheduler::resumeTargets(CCSet* pTargetsToResume){CCSetIterator iter;for (iter = pTargetsToResume->begin(); iter != pTargetsToResume->end(); ++iter){resumeTarget(*iter);}}在看完源码之后,来说下实际运用:
点击暂停按钮:
void MainGameScene::pauseMenuCallBack( CCObject *pSender ) {FDDialogLayer *dialogLayer = FDDialogLayer::create(DIALOG_GAME_PAUSE);_m_pBeforeTargetSets = CCDirector::sharedDirector()->getScheduler()->pauseAllTargets(); //这是关键1_m_pBeforeTargetSets->retain(); //这是关键2this->addChild(dialogLayer,500,500);}点击恢复按钮:
}else if(m_pDialogSpecies == DIALOG_GAME_FORGROUND) {timeFlag = 1;//这是关键3,此tag用于图片切换timeSprite = CCSprite::create(RESUME_FIR);CCSize winSize = CCDirector::sharedDirector()->getWinSize();timeSprite->setPosition(ccp(winSize.width/2,winSize.height/2));this->addChild(timeSprite);if (timeSprite) {this->schedule(schedule_selector(FDDialogLayer::updateTime),1);//这是关键4 调度 } }void FDDialogLayer::updateTime(float dt) { if (timeFlag < 3){
timeFlag++;
char temp[32];
sprintf(temp, "resume/t%d.png",timeFlag);
CCTexture2D *texture = CCTextureCache::sharedTextureCache()->addImage(temp);CCSize conSize = texture->getContentSize();timeSprite->setTexture(texture);timeSprite->setTextureRect(CCRectMake(0, 0, conSize.width, conSize.height));}else{continueGame();//这是关键5 返回场景this->unschedule(schedule_selector(FDDialogLayer::updateTime));} }void FDDialogLayer::continueGame(){MainGameScene *mainGame = (MainGameScene*)CCDirector::sharedDirector()->getRunningScene()->getChildren()->objectAtIndex(0);CCSet *set = mainGame->getBeforeTargetSets();//这是关键6,这是暂停所有调度者时的返回值 CCDirector::sharedDirector()->getScheduler()->resumeTargets(set);//这是关键7 恢复游戏this->removeFromParentAndCleanup(true);CCTextureCache::sharedTextureCache()->removeTextureForKey(RESUME_FIR);CCTextureCache::sharedTextureCache()->removeTextureForKey(RESUME_SEC);CCTextureCache::sharedTextureCache()->removeTextureForKey(RESUME_TIR); }
转载于:https://www.cnblogs.com/DswCnblog/p/3861321.html
总结
以上是生活随笔为你收集整理的Cocos2d-x和时间有关的代码的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: WordPress 运行流程分析
- 下一篇: SSL F5