浅谈Cocos2d-js cc.director

在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来控制场景流。

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

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

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

环境设置和属性

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

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

导演对象系统事件

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

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

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

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

原文地址:https://www.cnblogs.com/mikeCao/p/9021661.html

时间: 2024-08-10 12:15:41

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

【火的不行的前端你必须知道】一、浅谈node.js

引子: 现在都2017年了,在这个前端盛行的年头,在不懂一些前端流行的技术就落伍了,恰好公司H5端项目也是让这个方向去替换. 技术选型: 这里主要是简单说一下,后面会分章节详细分析 1.react: 目前最流行的前端框架之一 2.nowa: webpack系列的一个web工具,打包,编译等 3.react-keeper: 一种路由框架 4.ES6,这个不用介绍了吧(眯眼笑) 5.antd-mobile:阿里蚂蚁出的一个前端框架,面对大部分素材够用了 6.no-flux;状态管理的一种组件  这些

浅谈Node.js单线程模型

Node.js采用 事件驱动 和 异步I/O 的方式,实现了一个单线程.高并发的运行时环境,而单线程就意味着同一时间只能做一件事,那么Node.js如何利用单线程来实现高并发和异步I/O?本文将围绕这个问题来探讨Node.js的单线程模型: 1.高并发 一般来说,高并发的解决方案就是多线程模型,服务器为每个客户端请求分配一个线程,使用同步I/O,系统通过线程切换来弥补同步I/O调用的时间开销,比如Apache就是这种策略,由于I/O一般都是耗时操作,因此这种策略很难实现高性能,但非常简单,可以实

浅谈vue.js

在使用vue.js前,首先得安装vue.js. 对于vue.js的安装,有以下几种方法: 1.通过官网下载: Vue.js 官网下载地址:http://vuejs.org/guide/installation.html 2.使用CDN方法: 以下推荐国外比较稳定的两个 CDN,个人建议下载到本地. BootCDN(国内) : https://cdn.bootcss.com/vue/2.2.2/vue.min.js unpkg:https://unpkg.com/vue/dist/vue.js,

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

Underscore.js是一个很精干的库,压缩后只有5.2KB.它提供了几十种函数式编程的方法,弥补了标准库的不足,大大方便了JavaScript的编程. 本文仅探讨Underscore.js的两个函数方法 _.throttle 和 _.debounce 的原理.效果和用途. 通常的函数(或方法)调用过程分为三个部分:请求.执行和响应.(文中“请求”与“调用”同义,“响应”与“返回”同义,为了更好的表述,刻意采用请求和响应的说法.) 某些场景下,比如响应鼠标移动或者窗口大小调整的事件,触发频率

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

Node.js采用 事件驱动 和 异步I/O 的方式,实现了一个单线程.高并发的运行时环境,而单线程就意味着同一时间只能做一件事,那么Node.js如何利用单线程来实现高并发和异步I/O?本文将围绕这个问题来探讨Node.js的单线程模型: 1.高并发 一般来说,高并发的解决方案就是多线程模型,服务器为每个客户端请求分配一个线程,使用同步I/O,系统通过线程切换来弥补同步I/O调用的时间开销,比如Apache就是这种策略,由于I/O一般都是耗时操作,因此这种策略很难实现高性能,但非常简单,可以实

浅谈对Js闭包的理解

理解Js的闭包,首先让我们先看几个概念 执行环境(executive environment)每个函数都有自己的执行环境,匿名函数默认为全局环境. 作用域链(scope chain)子函数继承父函数,但是父函数不能引用子函数. 变量对象(variable object)分为全局变量对象,和局部变量对象,前者的生存在整个环境中,后者在生存在函数的执行环境下,就是说,执行函数时被创建,当函数执行完后被销毁. 怎么被销毁的啊?目前最常见的算法是当变量对象不再被引用时,便可回收内存. 但是,若是想在函数

浅谈require js

最近在项目中用到require js,不是很熟悉,所以上网找了一些资料,结合代码学习了一下.其实,require js 还是比较好理解的.require js的出现就是为了管理js,当然它可以处理js的依赖关系,同时达到异步加载,不会影响浏览器的渲染.那么具体是如何进行管理js的依赖关系呢?如下: 第一种方式:通过shim配置依赖关系,比如下图,sw依赖jquery. require.config({    baseUrl: "js", paths: { jquery: "j

Vue 浅谈前端js框架vue

Vue Vue近几年来特别的受关注,三年前的时候angularJS霸占前端JS框架市场很长时间,接着react框架横空出世,因为它有一个特性是虚拟DOM,从性能上碾轧angularJS,这个时候,vue1.0悄悄 的问世了,它的优雅,轻便也吸引了一部分用户,开始收到关注,16年中旬,VUE2.0问世,这个时候vue不管从性能上,还是从成本上都隐隐超过了react,火的一塌糊涂,这个时候,angular 开发团队也开发了angular2.0版本,并且更名为angular,吸收了react.vue的

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

看的文章来自: https://blog.coding.net/blog/the-difference-between-throttle-and-debounce-in-underscorejs 使用场景 只要牵涉到连续事件或频率控制相关的应用都可以考虑到这两个函数,比如: 游戏射击,keydown 事件 文本输入.自动完成,keyup 事件 鼠标移动,mousemove 事件 DOM 元素动态定位,window 对象的 resize 和 scroll 事件 文章里有个比喻很形象 throttl

浅谈对Js面向对象的理解(1)

面向对象的语言有一个标志,那就是它们都有类的概念,通过类来创建任意多个具有相同属性和方法的对象.它是一种程序开发的方法,它将对象作为程序的基本单元,将逻辑和数据封装其中,以提高代码的灵活性.重用性和扩展性.对象是把数据及对数据的操作方法放在一起,作为一个相互依存的整体.简单的来说,就是很多属性放在集合中,而集合中的属性属性值一一对应,属性属性值也就是我们平时所说的键值对,其中键值可以是数据或函数. 它的属性类型包括 1.数据属性 2.访问器属性 其中数据属性包括以下四个,我们最常见的应该就是Va