分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

浅谈Cocos2d-js cc.director

发布时间:2023-09-06 01:53责任编辑:彭小芳关键词:js

在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_CUSTOMcc.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: 这个事件在导演对象的投影属性被修改之后触发。

浅谈Cocos2d-js cc.director

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

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved