Cocos2d-x调度器ؓ(f)游戏提供定时事g和定时调用服务。所有Node对象都知道如何调度和取消调度事gQ用调度器有几个好处:(x)
使用场景Q?/span>游戏中我们经怼(x)随时间的变化而做一些逻辑判断Q如撞(g)。ؓ(f)?jin)解决以上问题,我们引入了(jin)调度器Q这使得游戏能够更好的处理动态事件。Cocos2d-x提供?jin)多U调度机Ӟ在开发中我们通常?x)用?U调度器Q?/p> 以下我们来对q?U调度器做简单的介绍?br /> 游戏开发中Q在某些情况下我们可能不需要频J的q行逻辑(g),q样可以提高游戏性能。所以Cocos2d-xq提供了(jin)自定义调度器Q可以实C一定的旉间隔q箋调用某个函数?/p> ׃引擎的调度机Ӟ自定义时间间隔必d于两帧的间隔Q否则两帧内的多ơ调用会(x)被合q成一ơ调用。所以自定义旉间隔应在0.1U以上?/p> 同样Q取消该调度器可以用schedulerUpdate()
schedule(SEL_SCHEDULE selector, float interval, unsigned int repeat, float delay)
scheduleOnce(SEL_SCHEDULE selector, float delay)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
我的理解Q?/span>
我们知道schedulerUpdate()也就是默认调度器的实现是ZupdateҎ(gu)Q该Ҏ(gu)是虚Ҏ(gu)定义在NodecMQ在cocos2dx框架中。会(x)在每ơ绘制一帧之前调用updateҎ(gu)Q但是默认情况下Q这个方法是不启用的?br />也许你也有这个疑问,Z么updateҎ(gu)可以实现调度。可以实现游戏逻辑的判断。这需要对游戏有一个认识,游戏都是׃帧一帧绘制而成Q在一定范围内的不同时刻,对应的会(x)是不同的游戏画面。回想一下,你学q的微积?br />Q如果我们把游戏的看成是微积分,那么q每一帧就是微分。所以率越高,游戏逼真Q越程Q体验度高。我们也可以借助q一思想来理解,Z官方框架中会(x)对update做出下面q句解释?br />该调度器是用Node的刷C件updateҎ(gu)Q该Ҏ(gu)在每帧绘制之前都?x)被调用一ơ。由于每帧之间时间间隔较短,所以每帧刷Cơ已_完成大部分游戏过E中需要的逻辑判断?/span>l色q句话是引用自官方,可能你会(x)不理?br />Z么说每之间间隔较短Q所以每一帧刷C此够完成部分游戏逻辑的判断?br />由官Ҏ(gu)我们知道一下代码的执行序Q下面用伪代码表C?br />{
1Q?span style="line-height: 25.2000007629395px; color: #000000; background-color: #ffffff;">
update();执行updateҎ(gu)
drawOneFrame();l制一?br /> go 1;
}
׃面的伪代码我们知道其惌辄意思是_(d)׃帧率比较高,能模拟出更真实的效果。而updateҎ(gu)敲好是在两之间调用Q所以update的执行时间一般来说是和率相互挂钩?br />也就是说update里面的所有变量其实是无限近于drawOneFrame()的。所以我们可以再update中书写一些游戏逻辑。简而言之,在update里面可以做的事等效于l每一帧里面各个对象的做逻辑判断?br />
接下来分析下自定义调度器Q先看官Ҏ(gu)档解说?/span>自定义调度器(scheduler)
unschedule(SEL_SCHEDULE selector, float delay)?br />我的理解:
两内的多次调用?x)被合ƈ成一ơ调用?br />自定义时间应该在0.1U以上,帧率是10.也就是你定义的定时器的频率应该小?0Q或者说间隔旉应该大于0.1?br />
其实dq个解说你应该更清楚?jin)我前面理论的正性,如果你定义的间隔旉比两帧短Q也是_(d)在同一帧类不断的重复回调selector指向的方法。但q是不需要的所以官方会(x)说将
当然cocos2dx框架q提供单ơ调度器具体看官Ҏ(gu)档,q个很好理解了(jin)Q不解释和分析?br />2015/4/6上午1:03:59
]]>
cocos2d: CCARRAY_FOREACH:1
cocos2d: CCARRAY_FOREACH:2
cocos2d: CCARRAY_FOREACH:3
cocos2d: KEY=one,CCDICT_FOREACH 1
cocos2d: KEY=two,CCDICT_FOREACH 2
cocos2d: KEY=three,CCDICT_FOREACH 3
HelloWorldDemo/proj.android/src/org/cocos2dx/目录?/span>Q其实这些都不要Q第四步也很好理解,因ؓ(f)当我们把q个工程导入eclipse时其找不到要引用
的这些包Q所以要其拯到那个目录下Q至于怎么记忆Q理解了(jin)容易,在项目中一共有五个q_Q对应五个文件夹Q我们关注的是antroidQ所以有关键字android
的那个文件夹是对应androidq_的,q入我们要到其源代码目录下,其实也就是src。而拷贝的包是在cocos框架下的所以我们要q入q个框架Q进入之后肯定有对应?/span>
个给q_所对应的库Q所以我们关注platformq个关键字,扑ֈ后进入,扑ֈantroidq_Q在q入其src下,一直进入知道找到l(f)ibq个文g夹,其拯到刚才说的地斏V?br />
finally step
最后一步就是打开eclipseQ选着android工程Q将我们创徏的那个项目中的andoird.projXXX什么这个文件夹导入Q然后你可以编译,q行Q这完成了(jin)转换到antroidq_?br />转换?/span>