cocos2dx 2.x定时器分析(5)

前端之家收集整理的这篇文章主要介绍了cocos2dx 2.x定时器分析(5)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
CCTimer类,上面几篇定时器的分析的文章中,多次用到了
这个类,在这里进行下说明。

1、第一次用到在CCScheduler::scheduleSelector函数中,一个target需要
添加多个时间间隔定时器时会出现,每一个CCTimer代表一个时间间隔定时器,

包含一个定时器的全部信息。

  1. 初始化方法
  2. /** Initializes a timer with a target,a selector and an interval in seconds,repeat in number of times to repeat,delay in seconds.
  3. * @lua NA
  4. */
  5. bool initWithTarget(CCObject *pTarget,SEL_SCHEDULE pfnSelector,float fSeconds,unsigned int nRepeat,float fDelay);

  1. 2、第二次是在脚本定时器中使用,
  2. unsigned int CCScheduler::scheduleScriptFunc(unsigned int nHandler,float fInterval,bool bPaused)
  3. 脚本定时器会用到CCSchedulerScriptHandlerEntry,这个类中有一个成员变量是CCTimer
  4. 会使用方法
  5. /** Initializes a timer with a script callback function and an interval in seconds. */
  6. bool initWithScriptHandler(int nHandler,float fSeconds);
  7.  
  8. 3void CCScheduler::update(float dt)函数中,会调用相应CCTimerupdate方法
  9.  
  10. -->>
  11. void CCTimer::update(float dt)
  12. {
  13. if (m_fElapsed == -1)
  14. {
  15. m_fElapsed = 0;
  16. m_uTimesExecuted = 0;
  17. }
  18. else
  19. {
  20. if (m_bRunForever && !m_bUseDelay)
  21. {//standard timer usage
  22. m_fElapsed += dt;
  23. if (m_fElapsed >= m_fInterval)
  24. {
  25. //执行回调函数
  26. if (m_pTarget && m_pfnSelector)
  27. {
  28. (m_pTarget->*m_pfnSelector)(m_fElapsed);
  29. }
  30. //执行脚本回调函数
  31. if (m_nScriptHandler)
  32. {
  33. CCScriptEngineManager::sharedManager()->getScriptEngine()->executeSchedule(m_nScriptHandler,m_fElapsed);
  34. }
  35. m_fElapsed = 0;
  36. }
  37. }
  38. else
  39. {//advanced usage
  40. m_fElapsed += dt;
  41. if (m_bUseDelay)
  42. {
  43. if( m_fElapsed >= m_fDelay )
  44. {
  45. if (m_pTarget && m_pfnSelector)
  46. {
  47. (m_pTarget->*m_pfnSelector)(m_fElapsed);
  48. }
  49.  
  50. if (m_nScriptHandler)
  51. {
  52. CCScriptEngineManager::sharedManager()->getScriptEngine()->executeSchedule(m_nScriptHandler,m_fElapsed);
  53. }
  54.  
  55. m_fElapsed = m_fElapsed - m_fDelay;
  56. m_uTimesExecuted += 1;
  57. m_bUseDelay = false;
  58. }
  59. }
  60. else
  61. {
  62. if (m_fElapsed >= m_fInterval)
  63. {
  64. if (m_pTarget && m_pfnSelector)
  65. {
  66. (m_pTarget->*m_pfnSelector)(m_fElapsed);
  67. }
  68.  
  69. if (m_nScriptHandler)
  70. {
  71. CCScriptEngineManager::sharedManager()->getScriptEngine()->executeSchedule(m_nScriptHandler,m_fElapsed);
  72. }
  73.  
  74. m_fElapsed = 0;
  75. m_uTimesExecuted += 1;
  76.  
  77. }
  78. }
  79.  
  80. if (!m_bRunForever && m_uTimesExecuted > m_uRepeat)
  81. { //unschedule timer
  82. CCDirector::sharedDirector()->getScheduler()->unscheduleSelector(m_pfnSelector,m_pTarget);
  83. }
  84. }
  85. }
  86. }

猜你在找的Cocos2d-x相关文章