cocos2dx进阶学习之CCApplication
继承关系
CCApplication-> CCApplicationProtocol
类主要成员变量
static CCApplication * sm_pSharedApplication;
静态成员变量,保存唯一的CCApplication实例的地址。在CCApplication的构造函数里保存唯一实例的地址。
类主要成员函数
CCApplication();
构造函数,在构造函数里将单例唯一的指针保存在静态变量sm_pSharedApplication中。
virtual int run();
循环处理应用程序消息,win32的环境下,run函数同时处理帧更新信息和windows消息,大概代码如下:
int CCApplication::run()
{
PVRFrameEnableControlWindow(false); // Main message loop:
MSG msg;
LARGE_INTEGER nFreq;
LARGE_INTEGER nLast;
LARGE_INTEGER nNow; QueryPerformanceFrequency(&nFreq);
QueryPerformanceCounter(&nLast); // Initialize instance and cocos2d.
if (!applicationDidFinishLaunching())
{
return 0;
} CCEGLView* pMainWnd = CCEGLView::sharedOpenGLView();
pMainWnd->centerWindow();
ShowWindow(pMainWnd->getHWnd(), SW_SHOW); while (1)
{
if (! PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
// Get current time tick.
QueryPerformanceCounter(&nNow); // If it's the time to draw next frame, draw it, else sleep a while.
if (nNow.QuadPart - nLast.QuadPart > m_nAnimationInterval.QuadPart)
{
nLast.QuadPart = nNow.QuadPart;
CCDirector::sharedDirector()->mainLoop();
}
else
{
Sleep(0);
}
continue;
} if (WM_QUIT == msg.message)
{
// Quit message loop.
break;
} // Deal with windows message.
if (! m_hAccelTable || ! TranslateAccelerator(msg.hwnd, m_hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
} return (int) msg.wParam;
}
在run函数中,有一些代码需要注意下:
1)PVRFrameEnableControlWindow(false):将一些程序信息写入注册表
2)回调applicationDidFinishLaunching函数,实现应用程序初始化
// Initialize instance and cocos2d.
if (!applicationDidFinishLaunching())
{
return 0;
}
在进入消息循环之前,调用applicationDidFinishLaunching()函数,这个函数是纯虚函数,要求用户实现,一般模板代码中,是在AppDelegate类中实现的。
3)计算程序运行时间,确定回调
LARGE_INTEGER nFreq;
LARGE_INTEGER nLast;
LARGE_INTEGER nNow; QueryPerformanceFrequency(&nFreq);
QueryPerformanceCounter(&nLast);
这部分代码在准备计算两次函数调用之间的时间差。这个时间差,用来计算经过的时间,如果超过m_nAnimationInterval调用schedule回调函数。
4)进入windows消息循环
其他代码都是处理windows消息,与cocos2dx关系不大,忽略就好
static CCApplication* sharedApplication();
这个静态函数返回单例的application对象,任何时候想调用CCApplication的接口时,只要使用CCApplication::sharedAppcation()获得app指针后,再调用响应的成员函数。
virtual void setAnimationInterval(double interval);
设置动画刷新间隔时间,这个间隔时间影响run函数调用CCDirector::mainLoop的频率,详细参见run函数
interval以秒为单位,但是保存时使用的是毫秒,因此有转换
总结
CCApplication主要负责提供应用程序初始化接口(通过AppDelegate重载虚函数),实现消息循环,实现CCApplication的单例管理
cocos2dx进阶学习之CCApplication的更多相关文章
- cocos2dx进阶学习之屏幕适配
背景 在学习cocos2dx时,我们在main函数中发现一句代码, #include "main.h" #include "AppDelegate.h" #in ...
- cocos2dx进阶学习之场景切换
背景 在学习马里奥时,我们学习到从菜单场景到游戏场景的切换,代码如下 void CMMenuScene::OnStartCallBack( CCObject *pSender ) { CCDirect ...
- cocos2dx进阶学习之CCScene
继承关系 CCScene -> CCNode -> CCObject CCScene抽象了一个场景的概念,类似舞台的一幕 函数 static CCScene *create(void); ...
- cocos2dx进阶学习之CCEGLView
继承关系 CCEGLView-> CCEGLViewProtocol CCEGLView是窗口,在不同平台上有不同的实现,而CCEGLViewProtocol是CCEGLView定义的接口,所以 ...
- cocos2dx进阶学习之CCAction
CCAction在cocos2dx中,抽象了节点的动作.它由CCObject派生,因此它不是渲染节点. 它经常的用法是,创建一个action,然后让某个CCNode对象(一般是精灵),去执行它. 在马 ...
- cocos2dx进阶学习之瓦片地图编辑器
之前学习了瓦片地图类,现在我们来学习下瓦片地图制作工具 这个是开源的工具,可以从网上下载,下面我们演示下怎么做地图 步骤1 将需要用到的图片放到一个目录下,比如我机器上就是d:\tiled,这些图片是 ...
- cocos2dx进阶学习之CCTMXTiledMap
继承关系 CCTMXTiledMap -> CCNode 它由CCNode派生,我们已经知道CCNode是cocos2dx的舞台对象的公共父类,所以CCTMXTiledMap也是个舞台对象 成员 ...
- cocos2dx进阶学习之CCSprite
继承关系 CCSprite -> CCNodeRGBA -> CCNode, CCRGBAProtocol CCTextureProtocol 从继承关系可以看出,CCSp ...
- cocos2dx进阶学习之CCLayer
继承关系 CCLayer -> CCNode,CCTouchDelegate,CCAccelerometerDelegate,CCKeypadDelegate CCLayer在cocos2dx中 ...
随机推荐
- cnzz广告管家使用心得
步着谷歌广告管家的后尘,国内百度公司和知名网络流量数据统计公司cnzz也分别推出了百度广告管家和cnzz广告管家.笔者分别注册了这两个网站.通过一段时间的使用,写下此文,希望对各位站长朋友们有所帮助. ...
- HDU 2451 Simple Addition Expression
题目大意:有一个关于 简单加法表达式 的定义告诉你,就是 选一个数字i 如果 i+(i+1)+(i+2) 它的和,没有任何一位进位的话,那就是 一个i的简单加法表达式,求小于n的表达式数目. 题 ...
- C++模板:文件操作
freopen("demo.in","r",stdin); freopen("demo.out","w",stdout) ...
- python利用utf-8编码判断中文英文字符(转)
下面这个小工具包含了判断unicode是否是汉字.数字.英文或者其他字符,全角符号转半角符号,unicode字符串归一化等工作. #!/usr/bin/env python # -*- coding: ...
- < high performance web sites > 阅读小记
high performance web sites 1,减少HTTP请求数 (1)图片加载使用image maps 或者 CSS Sprite (2)使用非http协议,如(ftp:, file: ...
- ASP.NET 母版页和内容页的加载顺序
Master 模板页Content 内容页如果希望Master页面的数据传给Content页面,请Init如果希望Content页面的数据传给Master页面,请重载Load具体细节不多说了,看下面页 ...
- [iOS]超详细Apache服务器的配置(10.10系统)
配置目的:有一个自己专属的测试服务器 我们需要做以下事情: 1.新建一个目录,存放网页 2.修改Apache配置文件httpd.conf - 修改两个路径 - 增加一个属性 - 支持PHP脚本 3.拷 ...
- java多线程——同步块synchronized详解
Java 同步块(synchronized block)用来标记方法或者代码块是同步的.Java同步块用来避免竞争.本文介绍以下内容: Java同步关键字(synchronzied) 实例方法同步 静 ...
- Eclipse安装反编译插件JD(Java Decompiler)
JD安装说明:*****Eclipse 插件安装*****1. 在网上搜索并下载jdeclipse_update_site.zip2. Eclipse -> Install New Softwa ...
- 《Python学习手册》
读书笔记请见Github博客:http://wuxichen.github.io/Myblog/reading/2014/10/04/LearningPython.html