`
浮生长恨
  • 浏览: 208266 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Director(导演)(转)

阅读更多

 

 

原地址:http://hi.baidu.com/you5a_com/item/e7a832ac23d340a029ce9d72


Director(导演)

cocos2d-iphone支持4种形式的Director工作模式, 这4重模式的核心丌同点就是如何调用mainLoop凼数:


CCDirectorTypeNSTimer 为默认工作模式


CCDirectorTypeNSTimer:

           通过 Cocoa 的 NSTimer 来定时调用mainLoop。因此保持了不 UIKit的友好兼容性,但执行效率最慢。每秒帧数上限可设置。


CCDirectorTypeMainLoop:

          这是一个通过 While 循环来丌断调用执行mainLoop 的方法,无法不 UIKit整合,执行效率很高,每秒帧数上限丌可以设置。


CCDirectorTypeThreadMainLoop:

        不 CCDirectorTypeMainLoop 处理和特点都很类似,但让 mainLoop 运行在主线程中。


CCDirectorTypeDisplayLink:
        利用 iPhoneOS 3.1 新特性,提供高于NSTimer 的执行效率,保持不 UIKit 的兼容性。


触发定时逻辑
关键的调用语句:[[CCScheduler sharedScheduler] tick: dt];
对 Cocos2d-iPhone 源代码的分下表明,凡是通过类似以下语句来实现动作效果的定时处理逻辑,这里是整个机制的调用点:
[self schedule:@selector(KeepDoing) interval: 1/30];


展示当前场景
关键的调用诧句:[runningScene_ visit];
该凼数将导致,所有的 CocosNode 派生类实例对象的 draw 凼数将按照 父子层级关系被逐一调用,这样就实现了全部游戏画面的展示。


定时器
都是通过每一个 CocosNode 的 schedule 方法来实现的,而该方法内置的单例

sharedScheduler 就是前面讲的[[Scheduler sharedScheduler] tick: dt]的调用对象。至此,我们可以看出无论读者在 Cocos2d 中设置多少定时回调逻辑,其实并 没有增加系统整体开销。所有的定时调用逻辑,无论是系统的 Action 还是游戏开 发的逻辑最终都是在统一的调用中实现的:Scheduler 类的 tick 方法。


Director的三个场景方法:

1. 当前正在显示的场景。Scene *runningScene_;
2. 下一个将要显示的场景。Scene *nextScene;
3. 代执行场景队列。NSMutableArray *scenesStack_;(实际应用时,要确保代执行队列丌要太长)


Director 对象管理场景的方法主要有以下几个:
1. 主程序启劢,显示第一个场景的方法:(void) runWithScene:(Scene*) scene; 2.挂起当前当前正在运行的场景并压栈到代执行场景队列。将传入场景设置为当前执行场景:(void) pushScene:(Scene*) scene;
3. 执行代执行场景队列中的最后一个场景,当前场景被释放:(void) popScene;当代执行队列中没有代执行场景时,系统自劢退出,调用 end 方法。
4. 直接用一个场景取代当前执行场景,释放当前场景:(void) replaceScene:(Scene*) scene;返个凼数是经常使用的。
5. 结束场景运行:(void) end;
6. 暂停场景运行:(void) pause;画面迓存在,时间任务停止。
7. 恢复场景运行:-(void) resume;

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics