在cocos2d-x里面,游戏的任何时间,只有一个场景对象实例处于运行状态,该对象可以作为当前游戏内容的整体包对象。

环境设定

进入游戏之前,导演会设置游戏的运行环境:

  1. 设置游戏视图,包含视图的投射,像素格式等。
  2. 设置游戏的运行帧率。
  3. 初始化定时器,动作管理器和事件管理器(为当前导演对象服务)
  4. 初始化贴图缓存和渲染器(为当前导演对象服务)
  5. 导演对象的其他设置。

执行主循环

主循环中每一次循环渲染一副画面到屏幕上。下面是每一帧绘制的详细过程:

  1. 计算上一帧开始到现在的时间(用于提供调试信息)
  2. 让导演对象中计时器执行被计划的任务。
  3. 通过时间管理器通知cc.Director.EVENT_AFTER_UPDATE事件。
  4. 清空屏幕。
  5. 如果需要进入下一个场景则进行场景切换。
  6. 遍历当前场景中的节点并更新节点的空间转换矩阵以及其他必要的信息,然后发送绘制指令给渲染器
  7. 通过时间管理器通知cc.Director.EVENT_AFTER_VISI事件。
  8. 渲染器按顺序执行所有渲染指令来最终绘制整个场景到屏幕上。
  9. 增加全局总帧数。

cc.director同样提高一些函数来控制主循环:

暂停主循环:cc.director.pause()

恢复主循环:cc.director.resume()

场景管理

通常来说,一个游戏包含用于不同用例的几个场景,程序应该通过cc.director的API来控制场景流。

  1. // 让导演对象执行目标场景
  2. cc.director.runScene(scene);
  3. // 获取当前正在执行的场景
  4. var scene = cc.director.getRunningScene();
  5. // 将一个新场景推入场景栈中,并替换运行场景为这个新场景
  6. var scene = cc.director.pushScene(scene);
  7. // 将栈顶的场景推出栈,并替换运行场景为推出后栈顶的新场景
  8. cc.director.popScene();
  9. // 将栈中除了栈底的根场景以外的所有场景推出,并替换运行场景为根场景。
  10. cc.director.popToRootScene();

除此以外,你可以通过cc.TransitionScene的效果类设置转场特效

  1. // 转场特效持续时间
  2. var transitionTime = 2;
  3. // 创建下一个场景
  4. var nextScene = new cc.Scene();
  5. // 使用下一个场景创建转场特效场景
  6. var transitionScene = new cc.TransitionProgressInOut(transitionTime, nextScene);
  7. // 替换运行场景为转场场景
  8. cc.director.runScene(transitionScene);

环境设置和属性

由于导演对象控制整个游戏运行环境,导演对象中还提供一些常用的设置和属性:

  1. // 获取游戏主循环是否被暂停
  2. var paused = cc.director.isPaused();
  3. // 设置或获取动画帧间隔,这个设置会直接影响帧率
  4. var interval = cc.director.getAnimationInterval();
  5. cc.director.setAnimationInterval(value);
  6. // 设置或获取导演对象的内容放缩比例
  7. var scale = cc.director.getContentScaleFactor();
  8. cc.director.setContentScaleFactor(scaleFactor);
  9. // 设置或获取游戏世界可视窗口的原点和大小
  10. var origin = cc.director.getVisibleOrigin();
  11. var size = cc.director.getVisibleSize();
  12. // 获取游戏世界大小,winSize的大小通常等同于设计分辨率,而winSizeInPixel的大小是游戏世界的像素大小
  13. var winSize = cc.director.getWinSize();
  14. var winSizeInPixel = cc.director.getWinSizeInPixels();
  15. // 设置或获取调试信息是否被显示
  16. var isDisplaying = cc.director.isDisplayStats();
  17. cc.director.setDisplayStats(displayStats);
  18. // 设置或获取视图,它指向`cc.view`
  19. var view = cc.director.getOpenGLView();
  20. cc.director.setOpenGLView(openGLView);
  21. // 设置或获取WebGL/OpenGL的投影,
  22. // 可能的投影类型包括:cc.Director.PROJECTION_2D, cc.Director.PROJECTION_3D, cc.Director.PROJECTION_CUSTOM
  23. cc.director.getProjection();
  24. cc.director.setProjection(projection);

导演对象系统事件

cc.director.EVENT_AFTER_DRAW: 这个事件在每一帧图像绘制完成之后被触发。

cc.director.EVENT_AFTER_VISIT: 这个事件在每一帧场景树遍历之后被触发。

cc.director.EVENT_AFTER_UPDATE: 这个事件在每一帧计时器任务执行完成之后被触发。

cc.director.EVENT_PROJECTION_CHANGED: 这个事件在导演对象的投影属性被修改之后触发。

浅谈Cocos2d-js cc.director的更多相关文章

  1. 浅谈Vue.js

    作为一名Vue.js的忠实用户,我想有必要写点文章来歌颂这一门美好的语言了,我给它的总体评价是“简单却不失优雅,小巧而不乏大匠”,下面将围绕这句话给大家介绍Vue.js,希望能够激发你对Vue.js的 ...

  2. 闲聊——浅谈前端js模块化演变

    function时代 前端这几年发展太快了,我学习的速度都跟不上演变的速度了(门派太多了,后台都是大牛公司支撑类似于facebook的react.google的angular,angular的1.0还 ...

  3. 浅谈对Js闭包的理解

    理解Js的闭包,首先让我们先看几个概念 执行环境(executive environment)每个函数都有自己的执行环境,匿名函数默认为全局环境. 作用域链(scope chain)子函数继承父函数, ...

  4. 浅谈 Underscore.js 中 _.throttle 和 _.debounce 的差异

    Underscore.js是一个很精干的库,压缩后只有5.2KB.它提供了几十种函数式编程的方法,弥补了标准库的不足,大大方便了JavaScript的编程. 本文仅探讨Underscore.js的两个 ...

  5. Vue 浅谈前端js框架vue

    Vue Vue近几年来特别的受关注,三年前的时候angularJS霸占前端JS框架市场很长时间,接着react框架横空出世,因为它有一个特性是虚拟DOM,从性能上碾轧angularJS,这个时候,vu ...

  6. 【转】浅谈Node.js单线程模型

    Node.js采用 事件驱动 和 异步I/O 的方式,实现了一个单线程.高并发的运行时环境,而单线程就意味着同一时间只能做一件事,那么Node.js如何利用单线程来实现高并发和异步I/O?本文将围绕这 ...

  7. 浅谈 Unserscore.js 中 _.throttle 和 _.debounce 的差异

    来源:http://blog.coding.net/blog/the-difference-between-throttle-and-debounce-in-underscorejs Unsersco ...

  8. 【第三周读书笔记】浅谈node.js中的异步回调和用js-xlsx操作Excel表格

    在初步学习了node.js之后,我发现他的时序问题我一直都很模糊不清,所以我专门学习了一下这一块. 首先我们来形象地理解一下进程和线程: 进程:CPU执行任务的模块.线程:模块中的最小单元. 例如:c ...

  9. 浅谈 Underscore.js 中 _.throttle 和 _.debounce 的差异[转]

    看的文章来自: https://blog.coding.net/blog/the-difference-between-throttle-and-debounce-in-underscorejs 使用 ...

  10. 浅谈对js原型的理解

    一.  在JavaScript中,一切皆对象,每个对象都有一个原型对象(prototype),而指向该原型对象的内部指针则是__proto__.当我们对对象进行for in 或者for of遍历时,就 ...

随机推荐

  1. Mastering MariaDB 神秘的MariaDB 中文翻译版

    是某群的哥们义务翻译的,宣传一下,还没时间时间读,粗滤看了全部翻译完了300多页佩服 https://github.com/CMant/Mastering-MariaDB- 原地址:如果你需要读,请s ...

  2. post body 传输参数

    postman 示例: 请求地址:http://member-system-api.dd01.work/api/inApp 设置headers头:Content-Type       applicat ...

  3. mybatis+oracle实现简单的模糊查询

    第一种 concat select * from cat_table where cat_name like concat(#{catName},'%') --单个百分号 select * from ...

  4. 点击图片img提交form表单

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  5. echart tootip使用技巧

    1.关于混合折线图tooltip显示不同单位  formatter: function (params){ return params[0].name + '<br/>' + params ...

  6. 小程序图表wx-chart

    下载地址 https://github.com/xiaolin3303/wx-charts 使用步骤: 一.解压后,把dist里面的wxcharts.js或者wxcharts-min.js放在小程序的 ...

  7. Linux常用总结

    CentOS 7.0中一个最主要的改变,就是切换到了systemd.它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理.systemd兼容SysV和Linux标准 ...

  8. asp.net机制理解(Javaweb同理)

    1.页面运行先后顺序 先执行aspx中的代码,然后再合并到HTML中,最后一起送到浏览器执行,HTML是从上到下执行的,而HTML中的Windows.onload()最后执行.而由于aspx中的代码是 ...

  9. 关于 ionic3 tabs 导航ico 点击 页面返回顶部

    类似微信 双击 页面返回顶部功能,ionic3 中有一个 Content. 将 import { Content } from 'ionic-angular'; 放入想要实现此功能的 ts中. 实例化 ...

  10. React 添加对 Less 的支持, 使用 create-react-app 脚手架

    ---恢复内容开始--- 参考博客与我自己的当前版本有一点出入, 所以就将 参考博客写到文章后面去了. 我的电脑:  系统: Ubuntu16.04, 1, 安装脚手架: create-react-a ...