今天看了cocos2d-html5代码里面的Director.

最简单的框架

先抛开cocos2d的框架不说,对于一个游戏来说,基本的逻辑框架还是很简单的,首先初始化的时候注册mouse, touch之类的事件处理函数, 然后在on_XXX_event里面改变游戏的一些状态, 之后就更新重绘图。drawScrene根据game的state和data来把画面呈现出来, interval_time用来控制帧率。

game={state, data}

init()
regist_XXX_event_handler(on_XXX_event);
regist_timer_handler(on_timeout) run()
while(game.state.running) {
drawScrene();
sleep(interval_time)
} on_XXX_event()
//change game state and data on_time_out()
//animations, change game state or data.

Director

Cocos2d 的director最基本原理从逻辑上也和上面最基本的框架类似,但结构上比这个好多了, 它提供了场景切换的功能。

run loop

首先看一下游戏是怎么跑以来的, 在application.run里面会设置一个timer, 在timer的callback里面会去调用director的mainloop, mainloop也就去画一帧场景吧

Application.run -->SetInterval(Director.mainloop, animationInterval)

Director.mainloop --> Director.drawScrene --> Director.runningScrene.vist()

Director.runningScrene.vist()这个会遍历Screne这个Node,把整个screne画出来

然后director还提供了俩个函数,pause and resume, 在pause的时候会把animationInterval改大些,省的浪费Cpu, 在resume 的时候再改回去.

Screne 管理

director里面有个screne的stack,这样就可以对screne作push, pop, remove, replace等操作了, 这个和一般的堆栈操作没啥不同, 不过需要切换场景的时候需要通知screne.

Director.setNextScene负责场景的切换,还有screne之间的切换效果, 比如从screne a 切换到screne b,

首先通知a场景退出

a.onExitTransitionDidStart()
a.onExit()
a.cleanup()

然后通知b场景准备好了

b.onEnter()
b.onExitTransitionDidFinished()

一般都是在onEnter里面把事件处理函数给注册好,然后在onExit的时候取消注册, 这儿用的是delegate的模式,screne和layer都是从Node派生出来的,Screne基本上没增加什么功能。 Layer添加了event delegate , timer schedule之类的功能, 一般写游戏都是从layer这边派生的.

其他杂项

Director它有点像一个大管家,一些比较全局的manager, 比如schedule, actionManager, EventDispather 这些也归他管 :), 还包含了一些设置Opengl state的一些函数像DepthTest, alphaBlending, projection之类的, 还有统计信息, 统计总过画了多少帧, 帧率是多少等功能.

Cocos2d-html5 笔记2: director的更多相关文章

  1. Cocos2d html5 笔记 1: overview

    昨天接触到了cocos2d-html5的的东东了, 第一次看其源代码一头雾水,幸好samples目录下面有几个例子,可以从这个入手. MoonWarriors是一个射击类的游戏, 有点像以前玩的雷电, ...

  2. HTML5笔记3——Web Storage和本地数据库

    上一篇:HTML5笔记2——HTML5音/视频标签详解 Web Storage概述 在HTML5中,除了Canvas元素之外,另一个新增的非常重要的功能是可以再客户端本地保存数据的Web Storag ...

  3. css3 和 html5 笔记

    1.css3 ie下大部分不兼容 ie9以下 浏览器低版本不兼容 需要写 -webket-transition:1s -moz-transition: 1s -o-transition:1s tran ...

  4. COCOS2D 学习笔记

    cc.Node.scheduleUpdate:function () * schedules the "update" method.                       ...

  5. Html5笔记 表格 布局

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. HTML5笔记2——HTML5音/视频标签详解

    音视频的发展史 早期:<embed>+<object>+文件 问题:不是所有浏览器都支持,而且embed不是标准. 现状:Realplay.window media.Quick ...

  7. HTML5笔记:跨域通讯、多线程、本地存储和多图片上传技术

    最近做项目在前端我使用了很多新技术,这些技术有bootstrap.angularjs,不过最让我兴奋的还是使用了HTML5的技术,今天我想总结一些HTML5的技术,好记性不如烂笔头,写写文章可以很好的 ...

  8. HTML5笔记1——HTML5的发展史及标签的改变

    记得第一次接触HTML5还是在<联信永益>实习那会儿(2011),当时一个项目技术选型的时候面临两种选择,分别是Silverlight和HTML5,那是用的最新的IE浏览器版本还是IE9, ...

  9. cocos2d学习笔记

    doxygen工具 生成cocos2d的api文档 位图字体编辑工具 Glyph Designer http://www.71squared.com/glyphdesigner  收费的 CCLabl ...

随机推荐

  1. RxCache 的代码分析,含缓存时间duration的在代码中改变的自己实现的机制

    当应用进程创建 RxCache 的实例后,会给应用进程返回一个 rxcache实例及一个 ProxyProvider,代码如下: CacheProviders providers = new RxCa ...

  2. python 使用 setup.py 方式安装及包的卸载

     安装:         可通过 --home 或 --prefix 指定安装目录 --prefix=xx/xxx    选择安装目录 --record files.txt   记录所有安装文件的路径 ...

  3. 开发资源列表【Worldsing分享】

      ucGUI(emWin)类: ucGui 汉字库生成(汉字库提取工具):ucGuiFont点击下载 ucGui v3.98 VC模拟工程源代码(VS2008):ucGUI3.98 VS2008 点 ...

  4. HDU2947Bicycle Puzzle(组合原理)

    题目大意: 你和朋友两人玩游戏,将一个图片均等切割成W* H块,打乱每一小块的位置.拼图游戏开始.每次,可以交换任意两块,记下交换的次数,图片还原游戏结束.得分为执行交换的次数.得分越小越好. 现在, ...

  5. StructLayout特性

    StructLayout特性          公共语言运行库利用 StructLayoutAttribute控制类或结构的数据字段在托管内存中的物理布局,即类或结构需要按某种方式排列.如果要将类传递 ...

  6. php连接mysql配置

    php连接mysql测试代码: <?php $link=mysql_connect('localhost','root','123456'); if(!$link) echo "失败! ...

  7. Twin Prime Conjecture(浙大计算机研究生保研复试上机考试-2011年)

    Twin Prime Conjecture                                            Time Limit: 2000/1000 MS (Java/Othe ...

  8. CCD摄像机与CMOS摄像机区别

    CCD摄像机 什么是CCD摄像机? CCD是Charge Coupled Device(电荷耦合器件)的缩写,它是一种半导体成像器件,因而具有灵敏度高.抗强光.畸变小.体积小.寿命长.抗震动等优点. ...

  9. mysql中key 、primary key 、unique key 与index区别

    一.key与primary key区别 CREATE TABLE wh_logrecord ( logrecord_id ) NOT NULL auto_increment, ) default NU ...

  10. angular实践第一弹:选项卡开发

    在学习angular的过程中,实践是最好的方法. 在开发选项卡的过程中,不需要再像jquery一样以DOM操作为核心,那什么样的情况是以DOM操作为核心的Jquery的思想呢? 一想到改变什么,就想设 ...