Cocos2dx-3.2 引擎学习(一)之CCApplication

CCApplication继承自ApplicationProtocol (class CC_DLL Application : public ApplicationProtocol)

ApplicationProtocol类中定义了相关的平台枚举量,应用启动完成回调,应用进入后台回调,从后台进入应用回调,程序执行的Interval周期,程序运行平台,程序的配置语言。程序只有ApplicationProtocol的.h文件,这个类是虚拟基类。

CCApplication采用的是单例模式,其中的单例就是Application * Application::sm_pSharedApplication = 0; 这个变量。

重要的Application::run函数,run函数中初始化了director,glview两个变量句柄,

两个函数:

QueryPerformanceFrequency()函数,获得CPU的主频。

QueryPerformanceCounter()函数,获得计时的次数

可以知道:

总次数 / 时间 = 频率  可以推导出:时间 = 总次数 / 频率 。因此可以推算渲染的帧数。

setAnimationInterval(1.0 / 60); 这句很熟悉,设置帧率。代码如下:

void Application::setAnimationInterval(double interval)
{
  LARGE_INTEGER nFreq;
  QueryPerformanceFrequency(&nFreq);
  _animationInterval.QuadPart = (LONGLONG)(interval * nFreq.QuadPart);  // 时间*CPU频率 = 总次数 (这个总次数是1/60秒CPU的计数次数)
}

有了总次数_animationInterval.QuadPart后,继续看run里面的代码:

有一个while主循环,循环中执行的是:

//前后两次计数次数相减,只有当达到上面计算的总次数后,渲染一次。1/60秒渲染一次

if (nNow.QuadPart - nLast.QuadPart > _animationInterval.QuadPart)  
{
  nLast.QuadPart = nNow.QuadPart;

  director->mainLoop();
  glview->pollEvents();
}else

{
  Sleep(0);
}

其中有2个重要的函数:

director->mainloop();  glview->pollEvents();  导演类的mainloop处理函数,和glview的事件处理函数。

这个主循环后面是程序走向结束时,执行的函数,判断glview->isOpenGLReady(),如果OpenGL是存在的,就执行director->end()函数。

并且释放glview。

至此,程序的主流程在Application类中就完成了开始-运行-结束的过程。

(这是Win32平台的CCApplication文件,其他平台的CCApplication文件并不是一致的,根据相关平台有其差异)

继承关系:

ApplicationProtocol

  |————Application

时间: 2024-10-16 06:25:00

Cocos2dx-3.2 引擎学习(一)之CCApplication的相关文章

Cocos2d-x 3.1.1 学习日志13--物理引擎登峰造极之路

cocos2dx在设计之初就集成了两套物理引擎,它们是box2d和chipmunk.我目前使用的是最新版的cocos2dx 3.1.1.引擎中默认使用的是chipmunk,如果想要改使用box2d的话,需要修改对应的android工程或者是ios工程的配置文件. 在2.x版本的cocos中,使用物理引擎的步骤十分繁琐.但在3.x版本中变得非常方便了.我这次的学习目标是制作一个打砖块的小游戏. 首先,现在的Scene类提供了一个静态工厂方法,用以创造一个集成物理引擎的场景. Scene::init

Cocos2d-x 3.1.1 学习日志13--CocosStudio学习必看

听说Cocos Studio很久了,主要是因为骨骼动画.目前看来Cocos2d-x播放动画的方式只有2种: 第一种:是播放序列帧动画,即将动画的每一帧都加载进缓存里,需要播放时再使用Animation类来播放,这种方法简单暴力,应对一些细节要求低的动画场景的时候,这么干无伤大雅.但是当动画帧数稍高的时候就会需要大量的图片,消耗资源很大. 第二种:是由Cocos2d-x提供的Action类来播放动画,这种动画是在帧循环中靠调整每次渲染的坐标来打到动画效果,由于帧循环是1/60秒刷新一次,会让这样播

cocos2d-js引擎学习笔记

Scale9Sprite 在用Scale9Sprite.create的时候出现Uncaught TypeError: Cannot call method 'create' of undefined这个错误, 后来发现在默认情况下,project.json里的modules只自带cocos2d模块,通过检查frameworks/cocos2d-html5/moduleConfig.json,可以看到cocos2d模块里并没有CCScale9Sprite.js这个类. 它在GUI里,所以可以在mo

Cocos2d-x 3.1.1 学习日志4--cocos2d-x解决中文乱码问题的几种办法

做个打飞机的游戏,由于版本太新,网上基本没有教教程,我的版本是cocos2d-x 3.1.1的,今天遇到cocos2dx中中文乱码的问题.无奈只好Google百度寻求答案,明白了这个问题的缘由.因为cocos2d-x内部是以utf8处理文本的,而VS直接输入时文本编码为GBK,如果添加L标志,则为Unicode编码. 解决这个问题有三种办法: 将源代码文件保存为utf8编码,不过由于编译器的问题,这种方式会导致很多无法预测的问题 将字符串用utf8编码集中存到一文件中,然后用代码读取这些字符串来

Cocos2d-x 3.1.1 学习日志3--C++ 初始化类的常量数据成员、静态数据成员、常量静态数据成员

有关const成员.static成员.const static成员的初始化: 1.const成员:只能在构造函数后的初始化列表中初始化 2.static成员:初始化在类外,且不加static修饰 3.const static成员:类只有唯一一份拷贝,且数值不能改变.因此,可以在类中声明处初始化,也可以像static在类外初始化 #include <iostream> using std::cout; using std::endl; class base { public: base(int

Cocos2d-x 3.1.1 学习日志12--一Cocos2dx3.1.1移植到Android平台的方法(最实用最有效的!!)

须要用到工具(依照顺序): 1.JDK 2.NDK 3.ANT 4.Adt-bundle-windows 将JDK文件夹下的bin文件夹路径加入到系统环境变量中. 解压NDK 解压Adt-bundle-windows 执行当中的eclipse.exe file->import 然后browse,找到project所在的文件夹 然后finish.. 会看到提示有错误,可是不要怕. 打开,看看错误原因 点击 ,右键->属性 点击edit 找到绝对路径,换句话说就是你之前解压cocos2dx3.1.

Cocos2d-x 3.1.1 学习日志11--一Windows下Android环境搭建(一定对你有用的!!)

安装步骤::(多么痛的领悟!!) 1. 配置JDK JDK下载地址: 设置环境变量: JAVA_HOME=C:\Program Files (x86)\Java\jdk1.7.0_21 CLASSPATH=.;%JAVA_HOME%\lib; Path增加%JAVA_HOME%\bin; 设置完后打开cmd,输入java -version 如果出现下面提示,表明环境变量设置成功: C:\Users\arlin>java -version java version "1.7.0_21&quo

Cocos2d-x 3.1.1 学习日志10--一进来你就知道了Box2D了

error LNK2019: 无法解析的外部符号 "public: __thiscall b2Draw::b2Draw(void)" ([email protected]@[email protected]),该符号在函数 "public: __thiscall GLESDebugDraw::GLESDebugDraw(float)" ([email protected]@[email protected]@Z) 中被引用 _thiscall b2World::~b

Cocos2d-x 3.1.1 学习日志6--30分钟了解C++11新特性

新的关键字 auto C++11中引入auto第一种作用是为了自动类型推导 auto的自动类型推导,用于从初始化表达式中推断出变量的数据类型.通过auto的自动类型推导,可以大大简化我们的编程工作.auto实际上实在编译时对变量进行了类型推导,所以不会对程序的运行效率造成不良影响.另外,似乎auto并不会影响编译速度,因为编译时本来也要右侧推导然后判断与左侧是否匹配.如果没有auto关键字 写个迭代器要写很长长,这也算是节省了我们的脑细胞吧,~~~~(>_<)~~~~ !! auto a; /

(原创)cocos2d-x 3.0+ lua 学习和工作(2) : 单一继承简单介绍

-- 星月相随倾心贡献~~~ -- 本章简单介绍一下:单一继承 -- 多继承本人还没有用过,主要是lua多继承感觉不好用~~~个人感觉~~~大汗~! -- example: local Base = class( "Base" ) Base.__index = Base function Base:ctor(...) print( self.__cname ) -- 输出:类名字.class( "xxx" ), self._cname 就是 xxx end func