今天看了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. [Lua]入门教程

    什么是Lua Lua 是一个小巧的脚本语言.是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Rober ...

  2. ios8 下请求读取通讯录权限 (网上众多资料漏下得一个坑)

    读取通讯录权限网上都有,不再叙述. 当第一次授权时用户假如拒绝授权, 第二次就无法再次弹出提示框授权. 刚开始时完全按照网上例子写的,第一次拒绝授权后,在设置里面无法找到对应的更改读取权限的选项. 后 ...

  3. create_project.py报错问题,建议用回python2.7

    d:\DevTool\cocos2d-x-2.2.2\cocos2d-x-2.2.2\tools\project-creator\create_project.py 报错 d:\DevTool\coc ...

  4. mysql innobackupex xtrabackup 大数据量 备份 还原(转)

    原文:http://blog.51yip.com/mysql/1650.html 作者:海底苍鹰 大数据量备份与还原,始终是个难点.当MYSQL超10G,用mysqldump来导出就比较慢了.在这里推 ...

  5. linux下生成 SSH 公钥,用于GitHub

    ssh-keygen -t rsa -C <email> 参见 https://help.github.com/articles/generating-ssh-keys/ Then add ...

  6. 【MySQL】查看MySQL配置文件路径及相关配置

    (1)关于配置文件路径 有时候,我发现虽然尝试修改了配置文件的一些变量,但是并没有生效.后来才发现原来是因为修改的文件并非MySQL服务器读取的配置文件. 如果不清楚MySQL当前使用的配置文件路径, ...

  7. delphi 集合

    DELPHI没有JAVA的丰富的集合(SET MAP LIST),只有Tlist,可包装各种类型

  8. git 和 svn的区别(转)

    英文原文:5 Fundamental differences between GIT & SVN,编译:外刊IT评论 如果你在读这篇文章,说明你跟大多数开发者一样对GIT感兴趣,如果你还没有机 ...

  9. Working with Other Node Types

    [Working with Other Node Types] [Shape Nodes Draw Path-Based Shapes] The SKShapeNode class draws a s ...

  10. spring MVC 如何查找URL对应的处理类

    在spring 3.1之前,查找URL相应的处理方法,需要分两步,第一步是调用DefaultAnnotationHandlerMapping,查找到相应的controller类,第二步,再调用Anno ...