cocos2d-x 学习笔记(2)cocos2d-x重要概念及项目结构

在cocos2d引擎中,有几个概念,分别是导演,场景,布景和人物角色。

导演(CCDirector)在cocos2d-x引擎中,导演类是游戏的组织者和领导者,导演制定规则让游戏内的场景,布景,和人物角色有序的运行

摄像机(CCCamera),每个节点都需要使用摄像机,当节点发生缩放,旋转,和位置变化时,都需要覆盖摄像机,让这个节点通过摄像机重新渲染。

场景(CCScene)在游戏里,场景就是关卡,关卡有人物和背景构成

布景(CCLayer)从概念上说,布景就是场景里的背景,其实就是层次的概念,这种概念在kjava时代就有,就是手动的把游戏中的场景分层(也有靠地图编辑器实现这一功能的)

人物(CCSprite),这就很明显了,当然包括主角和敌人,和npc,以我个人的理解,也包括游戏中的动态大图素及机关等

动作(CCAction),就是人物(CCSprite)拥有的动作

以下就是这些概念的关系图

项目结构:

include   //存放头文件

resource  //存放有游戏资源,声音及图片等

source    //存放.pp文件

CCDirector 导演控件

CCDirector负责scenes之间的前进或后退,是singleton(单例)模式的共享的对象。它知道当前哪个scene是激活。CCDirector以stack的方式处理scenes的调用(当另一个scene进入的时候暂当前的scene,完成之后再返回原来的 scene。CCDirector负责更换CCScene,在 CCLayer被push(入栈)的时候更换或结束当前的scene,另外:CCDirector 负责初始化OpenGL ES(嵌入式系统开放图形库)。
//初始化导演
CCDirector *director = CCDirector::sharedDirector();
CCDirector *director = [CCDirector sharedDirector];

建或更改场景(scenes) 
设置cocos2d的configuration细节 
获取视图(OpenGL, UIView, UIWindow) 
暂停,继续或结束游戏 
转换UIKit和OpenGL坐标 
获取CCDirector对象

例:
CCDirector *director = [CCDirector sharedDirector];  
设置游戏的设备方向
if GAME_AUTOROTATION == kGameAutorotationUIViewController 
    [director setDeviceOrientation:kCCDeviceOrientationPortrait]; 
else 
    [director setDeviceOrientation:kCCDeviceOrientationLandscapeLeft]; 
endif

if GAME_AUTOROTATION == kGameAutorotationUIViewController  
    [director setDeviceOrientation:kCCDeviceOrientationPortrait];  
else  
    [director setDeviceOrientation:kCCDeviceOrientationLandscapeLeft];  
endif

设置动画间隔
[director setAnimationInterval:1.0/60];

是否显示FPS数据
[director setDisplayFPS:YES];

启动场景
[[CCDirector sharedDirector] runWithScene: [HelloWorldScene node]];
=============================================================================  
Cocos2d-x引擎除了提供了CCDirector,还提供了一个CCDisplayLinkDirector,CCDisplayLinkDirector是一个可以自动刷新的CCDdirector。
主要函数:
static CCDirector * sharedDirector (void) /** 类静态方法,获取全局唯一的CCDirector对象,如不存在则创建并获取对象*/
CCScene * getRunningScene (void) //获取当前运行场景
double getAnimationInterval (void) //获取FPS值
virtual void setAnimationInterval (double dValue)=0 //设置FPS值
bool isDisplayStats (void)  //是否显示了FPS值
void setDisplayStats (bool bDisplayStats) //设置是否显示FPS值
float getSecondsPerFrame();     /** 获取每渲染一帧用的时间,单位秒 */
CCEGLView * getOpenGLView (void)//获取CCEGLView 
void setOpenGLView (CCEGLView *pobOpenGLView)//设置OpenGLView
bool isNextDeltaTimeZero(void);    /** 获取下次增量时间是否为零? */
void setNextDeltaTimeZero(bool bNextDeltaTimeZero);    /** 设置下次增量时间是否为零 */
bool isPaused (void)//当前是否适合暂停
unsigned int getTotalFrames(void);    /** 从CCDirector启动以来一共渲染了多少帧*/    
ccDirectorProjection getProjection (void)//获取 OpenGL projection. 
void setProjection (ccDirectorProjection kProjection)//设置//获取 OpenGL projection. 
bool isSendCleanupToScene (void)
  /** 场景被替换时是否会接收到cleanup消息。若新场景是被push进来的,旧场景不会收到cleanup消息;若新场景是被替换进来的,旧场景将收到cleanup消息*/
CCNode * getNotificationNode ()
   /** 在主场景被visit之后将被访问的对象,这个对象必须可以执行visit selector。经常用来挂载notification对象,如CCNotifications  */
 void setNotificationNode (CCNode *node)
  /** 设置在主场景被visit之后将被访问的对象*/
CCDirectorDelegate * getDelegate () const
 CCDirector delegate. 
void setDelegate (CCDirectorDelegate *pDelegate)
CCSize getWinSize (void)
 /** 返回OpenGL view的大小,单位为点*/ 
CCSize getWinSizeInPixels (void)
   /** 返回OpenGL view的大小,单位为像素*/
CCSize getVisibleSize ()
  /** 返回OpenGL view可见区域的大小,单位为点。
CCPoint getVisibleOrigin ()
 /** 返回OpenGL view可见区域的原点,单位为点*/
CCPoint convertToGL (const CCPoint &obPoint)
    /** 将UIKit坐标转换为OpenGL坐标*/
CCPoint convertToUI (const CCPoint &obPoint)
 /** 将OpenGL坐标转换为UIKit坐标*/ 
float getZEye (void)
 XXX: missing description. 
void runWithScene (CCScene *pScene)
    /** 指定进入Director的主循环运行的场景。ps:仅在运行第一个场景时调用,如果已经存在运行中的场景,不能调用本方法。本方法调用后将调用pushScene方法,然后调用startAnimation*/
void pushScene (CCScene *pScene)
    /** 将运行中的场景暂停,并push到场景堆栈中,新的场景将被执行。仅当已存在一个运行中的场景时本方法可被调用*/ 
void popScene (void)
    /** 从场景堆栈中pop出一个场景,此场景将替换现在正运行的场景,而运行中的场景将被删除。如果场景堆栈中没有可pop的场景,执行将终止。仅当已存在一个运行中的场景时本方法可被调用*/
void popToRootScene (void)
  /** 从场景堆栈中pop出除根场景外的所有场景,pop出的场景将替换现在正运行的场景,而运行中的场景将被删除。如果场景堆栈中没有可pop的场景,执行将终止。仅当已存在一个运行中的场景时本方法可被调用*/ 
void replaceScene (CCScene *pScene)
   /** 使用新场景替换当前场景,当前场景将终止,仅在存在当前场景时可调用*/
void end (void)
    /** 终止执行,释放运行中的场景,需要手动移除OpenGL view*/
void pause (void)
 ** 暂停运行中的场景。场景仍然被渲染,当所有定时器将被暂停,同时为了减少CPU消耗,暂停时FPS将降至每秒4帧*/
void resume (void)
   /** 恢复被暂停的场景,定时器被重新激活,delta time将为0(好像游戏未被暂停一般)*/ 
virtual void stopAnimation (void)=0
 /** 停止动画。将停止渲染,主循环停止。如不想停止动画渲染,使用pause方法*/
virtual void startAnimation (void)=0
 /** 主循环再次被触发,在调用stopAnimation后才能调用此方法。初次启动主循环不能使用本方法,而是应调用runWithScene方法*/ 
void drawScene (void)
 /** 绘制场景,每帧都会调用此方法。不要手动调用此方法*/
void purgeCachedData (void)
   /** 删除缓存数据。包括CCTextureCache、CCSpriteFrameCache、CCLabelBMFont缓存数据*/
void setGLDefaultValues (void)
/** 设置OpenGL的默认值*/ 
void setAlphaBlending (bool bOn)
  /** 设置是否启用OpenGL的alpha通道*/
void setDepthTest (bool bOn)
   /** 设置是否测试OpenGL景深*/ 
virtual void mainLoop (void)=0
void setContentScaleFactor (float scaleFactor)
 /** 设置surface的大小,单位为像素。可能和屏幕大小不一样。如High-res设备可能surface大小大于屏幕大小。仅在使用4.0以上SDK编译时有效。*
float getContentScaleFactor (void)
  /** 获取surface的大小,单位为像素*/
virtual CCScheduler * getScheduler (void)
 getScheduler 
virtual void setScheduler (CCScheduler *var)
 setScheduler 
virtual CCActionManager * getActionManager (void)
 getActionManager 
virtual void setActionManager (CCActionManager *var)
 setActionManager 
virtual CCTouchDispatcher * getTouchDispatcher (void)
 getTouchDispatcher 
virtual void setTouchDispatcher (CCTouchDispatcher *var)
 setTouchDispatcher 
virtual CCKeypadDispatcher * getKeypadDispatcher (void)
 getKeypadDispatcher 
virtual void setKeypadDispatcher (CCKeypadDispatcher *var)
 setKeypadDispatcher 
virtual CCAccelerometer * getAccelerometer (void)
 getAccelerometer 
virtual void setAccelerometer (CCAccelerometer *var)
 Public Member Functions inherited from CCCopying

cocos2d-x 学习笔记(2)cocos2d-x重要概念,项目结构及 CCDirector 导演控件相关推荐

  1. java给界面添加滚动条_Java Swing学习笔记:要求会默写或熟练的,GUI,控件,设置列或行,加滚动条,新界面...

    GUI:Java的图形化用户界面 学习其控件的使用 JLabel(文本控件),JTextField(文本框),JPassworldField(密码框),JButton(普通按钮) JRadioButt ...

  2. C#学习笔记(20140911)-下拉框、日历、pannel控件的使用

    晚上学习了下拉框.日历.pannel控件的使用,这几个控件看上去好像没有之前的一些控件那么简单,但是使用起来还是很方便.使用完了后,才发现真的和之前的几种控件差不多. 最了一个小小的模块:每日签到填写 ...

  3. WPF学习笔记(4):获取DataGridTemplateColumn模板定义的内容控件(转)

    在之前的DataGrid的DataGridTemplateColumn列中,自定义了一个TextBox控件,但是在C#代码中提示找不到这个控件,导致无法对该控件进行操作.在网上搜索后,发现一些处理方法 ...

  4. 谷粒商城学习笔记(2)-- 环境搭建项目结构创建

    一.环境 虚拟机ip192.168.174.128 本地ip192.168.31.14 本地和虚拟机要互相ping通 二.Docker 虚拟化容器技术.Docker基于镜像,可以秒级启动各种容器.每一 ...

  5. J2EE学习笔记三:EJB基础概念和知识 收藏

    J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...

  6. MySQL学习笔记02【SQL基本概念与通用语法、数据库的CRUD操作】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  7. 机器学习框架ML.NET学习笔记【1】基本概念与系列文章目录

    一.序言 微软的机器学习框架于2018年5月出了0.1版本,2019年5月发布1.0版本.期间各版本之间差异(包括命名空间.方法等)还是比较大的,随着1.0版发布,应该是趋于稳定了.之前在园子里也看到 ...

  8. Vue学习笔记:使用CLI构建Vue项目

    Vue学习笔记:使用CLI构建Vue项目 一.安装Vue CLI 要用到集成在node.js里的npm来安装Vue CLI. 1.下载并安装node.js 2.配置node.js的环境变量 3.启动命 ...

  9. 数据结构学习笔记:利用Python列表实现栈结构

    数据结构学习笔记:利用Python列表实现栈结构 利用Python列表实现栈结构.有两种实现方式: 1.将列表的末尾(rear)作为栈顶(top) 2.将列表的前端(front)作为栈顶(top) 一 ...

最新文章

  1. golang 正则表达式 简介
  2. HDU2023 求平均成绩
  3. 干货整理 Unity3D资源汇总
  4. EP39 全局静态ApplicationContext的问题
  5. OpenGl 绘制一个立方体
  6. python3贴吧_python3模拟百度登录并实现贴吧自动签到
  7. python与tensorflow的关系_python – 在TensorFlow,Session.run()和Tensor.eval()之间有什么区别?...
  8. Java常见GC算法_垃圾收集器及内存分配_G1垃圾收集器
  9. JavaScript高级之ECMAScript 6 新特性
  10. HTML+CSS+JS实现 ❤️圣诞抓礼物小游戏❤️
  11. python实现计算最少完美平方数
  12. java密钥长度受限制问题解决
  13. spring security3.x学习(3)_初探过滤器机制和auto-config用法
  14. zz:保护眼睛的颜色和各种背景颜色设置方法
  15. 深度学习-11:神经元、神经网络、人脑和卷积神网络
  16. 操作系统的内核到底是什么?
  17. oracle dump 文件解析,Oracle 常用的dump(Memory Dumps/File Dumps/Trace 文件使用示例)
  18. 翻译——现金流的时间性导致NPV与IRR的矛盾:炼油公司资本预算决策案例
  19. 3.1.1计算机网络(数据链路层 差错控制 循环冗余码 海明码 流量控制)
  20. 阿里云(三) Ubuntu系统下mysql卸载

热门文章

  1. AngularJs with Webpackv1 升級到 Webpack4
  2. 题目1022:游船出租 2007年浙江大学计算机及软件工程研究生机试真题
  3. 1节课学会PS ,Adobe PhotoshopCS6超速入门
  4. php格式转换成docx,如何在PHP中修改.doc或.docx文件
  5. 梅林rpc服务器用户名密码,网件(NETGEAR)路由器默认密码_初始密码_用户名密码-192路由网...
  6. 汽车电子测试标准:ISO 7637-2 ISO 16750-2
  7. 线结构光光条直线方程提取问题分析
  8. HNOI2018 摸鱼记
  9. [Python] 【原创】[Python源码]企业支付宝自动批量转账脚本
  10. Windows用户界面编程中的界面闪烁问题