Cocos2d-html5 笔记2: director
今天看了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的更多相关文章
- Cocos2d html5 笔记 1: overview
昨天接触到了cocos2d-html5的的东东了, 第一次看其源代码一头雾水,幸好samples目录下面有几个例子,可以从这个入手. MoonWarriors是一个射击类的游戏, 有点像以前玩的雷电, ...
- HTML5笔记3——Web Storage和本地数据库
上一篇:HTML5笔记2——HTML5音/视频标签详解 Web Storage概述 在HTML5中,除了Canvas元素之外,另一个新增的非常重要的功能是可以再客户端本地保存数据的Web Storag ...
- css3 和 html5 笔记
1.css3 ie下大部分不兼容 ie9以下 浏览器低版本不兼容 需要写 -webket-transition:1s -moz-transition: 1s -o-transition:1s tran ...
- COCOS2D 学习笔记
cc.Node.scheduleUpdate:function () * schedules the "update" method. ...
- Html5笔记 表格 布局
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- HTML5笔记2——HTML5音/视频标签详解
音视频的发展史 早期:<embed>+<object>+文件 问题:不是所有浏览器都支持,而且embed不是标准. 现状:Realplay.window media.Quick ...
- HTML5笔记:跨域通讯、多线程、本地存储和多图片上传技术
最近做项目在前端我使用了很多新技术,这些技术有bootstrap.angularjs,不过最让我兴奋的还是使用了HTML5的技术,今天我想总结一些HTML5的技术,好记性不如烂笔头,写写文章可以很好的 ...
- HTML5笔记1——HTML5的发展史及标签的改变
记得第一次接触HTML5还是在<联信永益>实习那会儿(2011),当时一个项目技术选型的时候面临两种选择,分别是Silverlight和HTML5,那是用的最新的IE浏览器版本还是IE9, ...
- cocos2d学习笔记
doxygen工具 生成cocos2d的api文档 位图字体编辑工具 Glyph Designer http://www.71squared.com/glyphdesigner 收费的 CCLabl ...
随机推荐
- [转]对Android开发者有益的40条优化建议
下面是开始Android编程的好方法: 找一些与你想做事情类似的代码 调整它,尝试让它做你像做的事情 经历问题 使用StackOverflow解决问题 对每个你像添加的特征重复上述过程.这种方法能够激 ...
- [转] AOP面向切面编程
AOP面向切面编程 AOP(Aspect-Oriented Programming,面向切面的编程),它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术. ...
- iOS app的webview注入JS遇到的坑
webview使用JSContext 向网页js注入时时机要选为网页加载完成后即放在 -(void)webViewDidFinishLoad:(UIWebView *)webView 方法 : -(v ...
- html5 canvas 钟表
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- [札记]IL经典指令解析之方法调度
call.callvirt和calli指令用于完成方法调用,有何区别呢? 1)call使用静态调度,也就是根据引用类型的静态类型来调度方法.call指令根据引用变量的类型来调用方法,因此通常用于调用非 ...
- Bezier曲线的原理 及 二次Bezier曲线的实现
原文地址:http://blog.csdn.net/jimi36/article/details/7792103 Bezier曲线的原理 Bezier曲线是应用于二维图形的曲线.曲线由顶点和控制点组成 ...
- VoHelper
VoHelper package com.isoftstone.pcis.policy.core.helper; import com.isoftstone.fwk.dao.CommonDao; im ...
- Windows PE3.0制作方法(从Win7中提取制作)
Windows PE3.0制作方法(从Win7中提取制作 在d:新建文件夹winpe,在winpe中新建sources.pe3和new文件夹,把附件中提供的工具imagex连文件夹一起放到winpe目 ...
- 对比AMD 890、AMD 880、 AMD 790、AMD 785、 AMD 780、AMD 7
770无集显.中低端独显主流. 780G带集显.现在可以无视. 785G现在是带集显的主流. 790GX高端带集显. 790FX专高端,无集显. 790X带集显.基本无视. 870 大板,无集显 88 ...
- LPTSTR、LPCSTR、LPCTSTR、LPSTR的来源及意义
UNICODE:它是用两个字节表示一个字符的方法.比如字符'A'在ASCII下面是一个字符,可'A'在UNICODE下面是两个字符,高字符用0填充,而且汉字'程'在ASCII下面是两个字节,而在UNI ...