博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocos2dx学习笔记之Director(导演类)
阅读量:6517 次
发布时间:2019-06-24

本文共 2854 字,大约阅读时间需要 9 分钟。

hot3.png

在Cocos2d-x中,把统筹游戏大局的类抽象为导演类(Director),Director是整个cocos2d-x引擎的核心,是整个游戏的导航仪。游戏中的一些常用操作就是由Director来控制的,比如OpenGL ES的初始化,场景的转换,游戏暂停继续的控制,世界坐标和GL坐标之间的切换,对节点的控制等,还有一些游戏数据的保存调用,屏幕尺寸的获取等都要由Director类来管理控制的。

因为Director是游戏项目的总导演,会经常调用进行一些控制,所以该Director利用了单件设计模式,也就是整个游戏里只有一个导演类。用getInstance() 方法取得Director的实例。

 

Tips:在cocos2d-x2.x的版本中使用sharedDirector()方法来获取导演类对象,而在3.x的版本中使用getInstance()来获取,不过sharedDirector()也可以使用。

Director类的继承关系如下:

DisplayLinkDirector继承CCDirector,是一个可以自动刷新的导演类。它支持60/1、1/30和1/15三种动画间隔(帧间隔)。

Director类的主要公共函数如下:

函数名

返回类型

描述

getRunningScene

场景类

获取当前正在运行的场景

getAnimationInterval

浮点型

获取每帧的时间

setAnimationInterval

浮点型

设置每帧的时间

isDisplayStats

布尔型

返回是否在屏幕左下角显示每帧的时间

setDisplayStats

设置是否在屏幕左下角显示每帧的时间

getSecondsPerFrame

浮点型

获取每帧的时间(单位为秒)

getOpenGLView

GL视图

获取绘制所有对象的OpenGL视图

设置绘制所有对象的OpenGL视图

 

布尔型

导演类对象是否暂停

整型

获取从导演类开始运行的帧数

投影类

获取OpenGL投影

设置OpenGL投影

设置OpenGL接口

布尔型

切换的场景是否接收清除信息

节点类

获取一个在主场景遍历后遍历的节点对象

设置一个在主场景遍历后遍历的节点对象

尺寸

获取屏幕大小(单位为点)

尺寸

获取像素级的屏幕大小(单位为像素)

尺寸

获取可见屏幕大小

矢量

获取可见屏幕的方向

矢量

转化为OpenGL坐标系

矢量

转化为UI坐标系

运行当前场景

挂起当前场景,压入栈中

从栈中弹出场景

从栈中弹出所有场景直到根场景

 

从栈中弹出所有场景直到某个等级

(等级为0为导演,等级为1为根场景)

替换当前场景

结束游戏

 

暂停游戏

 

恢复游戏

停止动画

开始动画

 

绘制场景

 

移除所有缓存数据

基于配置信息设置默认值

设置OpenGL默认值

设置OpenGL是否使用alpha通道

 

设置是否测试OpenGL深度

设置表面像素大小(不同于屏幕大小)

浮点型

获取表面像素大小

调度类

获取时间调度对象

设置时间调度对象

动作管理类

获取动作管理对象

设置动作管理对象

事件调度类

获取事件调度对象

设置事件调度对象

 

渲染器

返回渲染器

浮点型

返回控制台

浮点型

获取帧率

在新建的HelloWorld项目中,打开AppDelegate.cpp,我们可以看到如下代码:

 

[cpp]  

  1. //初始化函数  
  2. boolAppDelegate::applicationDidFinishLaunching() {  
  3. //获取导演对象  
  4. auto director =Director::getInstance();  
  5. //获取OpenGL视图  
  6.     auto glview = director->getOpenGLView();  
  7.     if(!glview) {  
  8.         glview = GLView::create("MyGame");  
  9.             //设置OpenGL视图  
  10.         director->setOpenGLView(glview);  
  11.     }  
  12.     // 设置显示每帧显示时间  
  13.     director->setDisplayStats(true);  
  14. // 设置每帧时间  
  15. director->setAnimationInterval(1.0/ 60);  
  16.     autoscene = HelloWorld::createScene();  
  17.     // 运行场景  
  18.     director->runWithScene(scene);  
  19.     return true;  
  20. }  
  21. // 游戏进入后台  
  22. voidAppDelegate::applicationDidEnterBackground() {  
  23.      //停止动画  
  24.     Director::getInstance()->stopAnimation();  
  25. }  
  26. // 从后台返回游戏  
  27. voidAppDelegate::applicationWillEnterForeground() {  
  28.      //开始动画  
  29.     Director::getInstance()->startAnimation();  
  30. }  

在HelloWorldScene.cpp中有:

 

[cpp]  

  1. //初始化  
  2. boolHelloWorld::init()  
  3. {  
  4.     if ( !Layer::init() )  
  5.     {  
  6.         return false;  
  7.     }  
  8.     //获取OpenGL视图可见大小  
  9. Size visibleSize= Director::getInstance()->getVisibleSize();  
  10. //获取OpenGL视图可见方向  
  11. Vec2 origin =Director::getInstance()->getVisibleOrigin();  
  12. …………………………….  
  13. }  
  14. //导演类结束  
  15. voidHelloWorld::menuCloseCallback(Ref* pSender)  
  16. {  
  17. #if(CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM ==CC_PLATFORM_WINRT)  
  18.      MessageBox("You pressed the close button.Windows Store Apps do not implement a close button.","Alert");  
  19.     return;  
  20. #endif  
  21.      //导演类结束  
  22.     Director::getInstance()->end();  
  23. #if(CC_TARGET_PLATFORM == CC_PLATFORM_IOS)  
  24.     exit(0);  
  25. #endif  
  26. }  

由此看来,Director不愧是整个游戏的“导演”。它在游戏中无所不在,大到整个游戏的控制,小到获取屏幕的尺寸,起着至关重要的作用。

转载于:https://my.oschina.net/andyzzh1314/blog/1808674

你可能感兴趣的文章
九州云实战人员为您揭秘成功部署OpenStack几大要点
查看>>
CloudCC:智能CRM究竟能否成为下一个行业风口?
查看>>
追求绿色数据中心
查看>>
Web开发初学指南
查看>>
探寻光存储没落的真正原因
查看>>
高通64位ARMv8系列服务器芯片商标命名:Centriq
查看>>
构建智能的新一代网络——专访Mellanox市场部副总裁 Gilad Shainer
查看>>
《数字视频和高清:算法和接口》一导读
查看>>
《中国人工智能学会通讯》——6.6 实体消歧技术研究
查看>>
如何在Windows查看端口占用情况及查杀进程
查看>>
洗茶,你误会了多少年?
查看>>
spring-aop
查看>>
android RecycleView Adapter简单封装
查看>>
Dart的数据库操作
查看>>
iOS打电话,发短信,发邮件,打开网址
查看>>
canvas学习笔记
查看>>
《Spring1之第十次站立会议》
查看>>
Unity Shader 噪声消融特效 - 剑灵死亡特效
查看>>
添加一条信息到列表,如果重复就替换,
查看>>
C#基础第五天
查看>>