cocos2dx 2.x定时器分析(3),cocos2dx2.x

  次阅读 作者:智能小宝 来源:互联网 2015-09-28 13:13 我要评论(0)

cocos2dx 2.x定时器分析(3),cocos2dx2.x

时间间隔定时器分析

1、//存放时间间隔定时器的结构

// Hash Element used for "selectors with interval"

typedef struct _hashSelectorEntry

{

ccArray *timers; //注:一个Target(如CCNode)中可能会添加多个时间间隔不同的定时器,

//因为属于同一个Target,只有一个tHashTimerEntry结构,

//但是时间间隔不同,回调不同的函数,所以

//需要存放在一个数组中,数组中的元素类型是CCTimer,后面分析

CCObject *target; // hash key (retained)

unsigned int timerIndex;

CCTimer *currentTimer;

bool currentTimerSalvaged;

bool paused;

UT_hash_handle hh;

} tHashTimerEntry;

注:在CCScheduler中,有一个成员变量,用于存放这种结构的哈希表

// Used for "selectors with interval"

struct _hashSelectorEntry *m_pHashForTimers;

2、添加时间间隔定时器

/** The scheduled method will be called every 'interval' seconds.

If paused is YES, then it won't be called until it is resumed.

If 'interval' is 0, it will be called every frame, but if so, it's recommended to use 'scheduleUpdateForTarget:' instead.

If the selector is already scheduled, then only the interval parameter will be updated without re-scheduling it again.

repeat let the action be repeated repeat + 1 times, use kCCRepeatForever to let the action run continuously

delay is the amount of time the action will wait before it'll start

@since v0.99.3, repeat and delay added in v1.1

@js NA

@lua NA

*/

void scheduleSelector(SEL_SCHEDULE pfnSelector, CCObject *pTarget, float fInterval, unsigned int repeat, float delay, bool bPaused);

-->>

void CCScheduler::scheduleSelector(SEL_SCHEDULE pfnSelector, CCObject *pTarget, float fInterval, unsigned int repeat, float delay, bool bPaused)

{

CCAssert(pfnSelector, "Argument selector must be non-NULL");

CCAssert(pTarget, "Argument target must be non-NULL");

//同一个Target只会有一个tHashTimerEntry结构

tHashTimerEntry *pElement = NULL;

HASH_FIND_INT(m_pHashForTimers, &pTarget, pElement);

//如果不存在,则新增加一个

if (! pElement)

{

pElement = (tHashTimerEntry *)calloc(sizeof(*pElement), 1);

pElement->target = pTarget;

if (pTarget)

{

pTarget->retain(); //对对象执行一次retain操作

}

//添加到m_pHashForTimers哈希表中

HASH_ADD_INT(m_pHashForTimers, target, pElement);

// Is this the 1st element ? Then set the pause level to all the selectors of this target

pElement->paused = bPaused;

}

else

{

CCAssert(pElement->paused == bPaused, "");

}

//同一个Target,如果有多个不同的定时器,存放到一个数组中

if (pElement->timers == NULL)

{

pElement->timers = ccArrayNew(10);

}

else

{

//如果某个pfnSelector回调函数已经存在,则只修改定时器的时间间隔

for (unsigned int i = 0; i < pElement->timers->num; ++i)

{

CCTimer *timer = (CCTimer*)pElement->timers->arr[i];

if (pfnSelector == timer->getSelector())

{

CCLOG("CCScheduler#scheduleSelector. Selector already scheduled. Updating interval from: %.4f to %.4f", timer->getInterval(), fInterval);

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...