用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 + ;
int month = tm->tm_mon + ;
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 < ) { 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(); //这是关键2   this->addChild(dialogLayer,,); }

点击恢复按钮:

}else if(m_pDialogSpecies == DIALOG_GAME_FORGROUND)
{
  timeFlag = ;//这是关键3,此tag用于图片切换
  timeSprite = CCSprite::create(RESUME_FIR);   CCSize winSize = CCDirector::sharedDirector()->getWinSize();
  timeSprite->setPosition(ccp(winSize.width/,winSize.height/));
  this->addChild(timeSprite);   if (timeSprite) {
    this->schedule(schedule_selector(FDDialogLayer::updateTime),);//这是关键4 调度   }
} void FDDialogLayer::updateTime(float dt)
{
  if (timeFlag < )
  {
    timeFlag++;
    char temp[];
    sprintf(temp, "resume/t%d.png",timeFlag);
    CCTexture2D *texture = CCTextureCache::sharedTextureCache()->addImage(temp);     CCSize conSize = texture->getContentSize();
    timeSprite->setTexture(texture);
    timeSprite->setTextureRect(CCRectMake(, , conSize.width, conSize.height));   }else
  {
    continueGame();//这是关键5 返回场景
    this->unschedule(schedule_selector(FDDialogLayer::updateTime));
  }
} void FDDialogLayer::continueGame() {   MainGameScene *mainGame = (MainGameScene*)CCDirector::sharedDirector()->getRunningScene()->getChildren()->objectAtIndex();   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);
}
 

Cocos2d-x和时间有关的代码的更多相关文章

  1. 基于jQuery发展历程时间轴特效代码

    分享一款基于jQuery发展历程时间轴特效代码,带左右箭头,数字时间轴选项卡切换特效下载.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div id="time ...

  2. cocos2d 高仿doodle jump 无源代码

    1. 游戏视频 主角眼熟吗?没错,上次跑酷游戏中的"30"来Jump了,有三种道具.主角光环,竹蜻蜓.翅膀: 有两种怪物,螃蟹和鸟: 有5种板子.点击屏幕,30会把它的嘴巴3给发射 ...

  3. 完整显示当前日期和时间的JS代码(2007年2月25日星期日正午12:42:48)

    代码演示效果为“2007年2月25日星期日正午12:42:48”. 使用方法:将下面的JS代码放到你想要显示的页面中(支持HTML页面),然后在你想要显示时间的位置插入下面的代码即可 <div ...

  4. C基础 时间业务实战代码

    引言 业务代码中遇到这样需求, 1. 二者是同一天吗, 2. 时间戳和时间串来回转, 3. 其它扩展需求 等. C写代码同样需要处理这方面时间问题. 本文就是为了解决这个问题. 相比其它时间库, 这里 ...

  5. 预计阅读时间核心jS代码

    <script type="text/javascript"> jq(document).ready(function() { var read_time=jq(&qu ...

  6. Xcode 改时间问题 lua代码没反应问题

    Xcode 改时间问题  rm -fr $_TARGET_BUILD_CONTENTS_PATH/$1/*

  7. Android仿快递 物流时间轴 的代码实现

    首先,这篇参考了别人的代码.根据自己的项目需求简单改造了一下,效果图如下 xml:代码 <?xml version="1.0" encoding="utf-8&qu ...

  8. Android 常用时间格式转换代码

    /** * 获取现在时间 * * @return 返回时间类型 yyyy-MM-dd HH:mm:ss */ public static Date getNowDate() { Date curren ...

  9. 计算文章作品发布时间的php代码

    /* 计算发布时间据当前时间 如1秒前 1分钟前 1小时 1天 1个星期 1个人月 1年 */ function format_dates($time) { if($time <= 0) ret ...

随机推荐

  1. JavaScript简述一

    一.什么时JavaScript JavaScript是一种具有面向对象能力的,解释型的设计语言,更具体一点,它是基于圣明和事件驱动并具有相对安全必的客户端脚本语言,因为它不需要在一个语言环境下运行,只 ...

  2. html5调用摄像头实现拍照

    技术时刻都在前进着.我们的需求也是时刻在改变着.最近在开发中遇到了用户进行账号注册时需要个人图像,网站提供自动拍照功能.还有在登录了PC之后,手机端进行登录时只需要扫描一下PC上的二维码就可以登录.这 ...

  3. spring-tool-suite(STS) 创建 spring boot项目

    1.创建一个Spring Starter Project工程(new --> Spring Starter Project) 2.选择自己需要的依赖,因为想要通过REST方式来验证是否成功创建, ...

  4. Cocos2d-x3.0 iOS 一键编译多个target并打包ipa。

    1.编写app打包为ipa的 shell脚本.将以下代码保存为app2ipa.sh. #!/bin/sh m_appPath="" m_ipaPath="" m ...

  5. javaWeb 批量下载图片

      批量下载网页图片 CreateTime--2017年9月26日15:40:43 Author:Marydon 所用技术:javascript.java 测试浏览器:chrome 开发工具:Ecli ...

  6. 〖Linux〗打开qtcreater出现错误的解决方法

    1. 更换了显卡驱动,发现打开qtcreater时出现了以下的错误: qtcreator: error : cannot open shared object file: No such file o ...

  7. 在Eclipse中开发C/C++项目

    摘要:通过本文你将获得如何在Eclipse平台上开发C/C++项目的总体认识.虽然Eclipse主要被用来开发Java项目,但它的框架使得它很容易实现对其他开发语言的支持.在这篇文章里,你将学会如何使 ...

  8. Git恢复之前版本的两种方法reset、revert(图文详解)

    一.问题描述在利用github实现多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,本文总结了两种解决方法:回退(reset).反做(reve ...

  9. js replaceChild

    //父亲元素.replaceChild(新,旧) 1 <ul id="city"> <li id="bj">北京</li> ...

  10. HDUOJ--点球大战

    点球大战 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...