代码跟踪--初学cocos2dx
来源:互联网 发布:软件技术优势怎么写 编辑:程序博客网 时间:2024/05/01 11:06
还是要好好学下,看了下代码以免又忘 了, 还是写下来的好
--环境搭建,网上一大把,随便找篇文章弄弄就好。
--先学windows平台 再看其他的吧。
--main.cpp 学过c++的应该很熟悉, 自然先看main函数,发现代码很简单 只有五行,关键就三行代码
AppDelegate app; //定义一个对象,初一看整不知道这app跟程序有啥关系,当然AppDelegate 是继承CCApplication 貌似之前看cocos2dx的概述
听说挺多单例的,CCApplication 应该就是一个单例, 追踪到构造函数,有这么一句代码 sm_pSharedApplication = this; 当然sm_pSharedApplication 肯定是静态的
不然咋单例呢。模模糊糊,勉强算理解了吧
CCEGLView* eglView = CCEGLView::sharedOpenGLView(); // 这是渲染相关的东西, 就像window里面的视图吧,貌似它也是单例的,可都没创建咋就可以去拿来用了呢
仔细追踪代码才发现 这个函数既是获取 指针 也是创建指针的函数。
static CCEGLView* s_pEglView = NULL; //静态嘛, 只执行一次
if (s_pEglView == NULL)
{
s_pEglView = new CCEGLView(); // 若没创建 就创建
if(!s_pEglView->Create()) // 顺便吧窗口给创建了
{
delete s_pEglView;
s_pEglView = NULL;
}
}
Create 创建窗口很简单, 写过win32程序的 你会发现很熟悉, 创建窗口 注册窗口 调整下位置 设置好消息回调接口
窗口出来了 然后就是设置一些渲染相关的参数
return CCApplication::sharedApplication()->run(); //然后就run了,可以猜到肯定是游戏循环了, run函数 里面主要就是一while循环, 不停的接受window消息,然后处理,
中间一句很关键代码 CCDirector::sharedDirector()->mainLoop(); // 自然 肯定是游戏流程控制器 来控制游戏的流程
CCDirector 话说也是单例。听说他叫导演,控制整个游戏的流程,废话不多少看看mainLoop到底干了啥,突然发现,咦不是没创建吗 咋就用起来了,发现看快了点
漏看了sharedDirector,这个函数很简单,也是创建导演。
s_SharedDirector = new CCDisplayLinkDirector(); //创建的并不是CCDirector 而是 CCDisplayLinkDirector ,当然后者是继承前者的 为啥不写在一个类嗯, 后者留了一个虚函数接口 估计以后继承 或者码农操作 只要修改后者即可 前者几乎是固定的了, 这样代码比较清晰一点吧。
s_SharedDirector->init(); 这个函数有点多啊,看起来有点小恐怖,慢慢啃。第一个函数就是setDefaultValues(); 又是一堆代码,看来代码量越来越大了
CCConfiguration *conf = CCConfiguration::sharedConfiguration();
CCConfiguration 大致飘了一眼 我猜是一个辅助类, 检查一些硬件支持,加载一些配置文件吧
// default FPS
double fps = conf->getNumber("cocos2d.x.fps", kDefaultFPS);
m_dOldAnimationInterval = m_dAnimationInterval = 1.0 / fps;
//配置默认fps
// Display FPS
m_bDisplayStats = conf->getBool("cocos2d.x.display_fps", false);
CCConfiguration 又去飘了下 发现一大堆东西, 暂时不看了,头晕了,我猜就是根据配置文件设置默认fps是否开启吧
// GL projection
const char *projection = conf->getCString("cocos2d.x.gl.projection", "3d");
if( strcmp(projection, "3d") == 0 )
m_eProjection = kCCDirectorProjection3D;
else if (strcmp(projection, "2d") == 0)
m_eProjection = kCCDirectorProjection2D;
else if (strcmp(projection, "custom") == 0)
m_eProjection = kCCDirectorProjectionCustom;
else
CCAssert(false, "Invalid projection value");
设置视图是3d还是2d还是custom还是视图初始化失败
// Default pixel format for PNG images with alpha
const char *pixel_format = conf->getCString("cocos2d.x.texture.pixel_format_for_png", "rgba8888");
if( strcmp(pixel_format, "rgba8888") == 0 )
CCTexture2D::setDefaultAlphaPixelFormat(kCCTexture2DPixelFormat_RGBA8888);
else if( strcmp(pixel_format, "rgba4444") == 0 )
CCTexture2D::setDefaultAlphaPixelFormat(kCCTexture2DPixelFormat_RGBA4444);
else if( strcmp(pixel_format, "rgba5551") == 0 )
CCTexture2D::setDefaultAlphaPixelFormat(kCCTexture2DPixelFormat_RGB5A1);
更加硬件设置默认支持的贴图格式
// PVR v2 has alpha premultiplied ?
bool pvr_alpha_premultipled = conf->getBool("cocos2d.x.texture.pvrv2_has_alpha_premultiplied", false);
CCTexture2D::PVRImagesHavePremultipliedAlpha(pvr_alpha_premultipled);
//设置硬件alpha混合方式
看的不是很懂,大致就这么个意思吧
继续回到s_SharedDirector->init(); 其他就是各种数据的初始化了 以及 键盘 触摸屏 特效系统 等等各种初始化
好吧 我又忘记从哪看到这了,明天在看吧。
- 代码跟踪--初学cocos2dx
- Cocos2dx崩溃日志跟踪
- 初学cocos2dx笔记01
- 初学cocos2dx lua
- 初学cocos2dx lua
- (12) 初学cocos2dx lua
- cocos2dx初学日记
- 跟踪代码
- 代码跟踪
- cocos2dx学习之触摸初学
- C#代码跟踪代码
- 如何跟踪ACPI代码
- C/C++代码跟踪
- mtd子系统代码跟踪
- MFC之代码跟踪
- Android Launcher2代码跟踪
- 代码跟踪调试方法
- Android跟踪代码
- objective-c float 类型,疯狂IOS讲义,上没有
- java_easyui体系之layout
- JAVA加密技术-----MD5 与SHA 加密
- 2014----激情复燃的时光
- ORA-04042 procedure, function, package, or package body does not exist
- 代码跟踪--初学cocos2dx
- Ubuntu下使用Monaco字体
- HTML5 Canvas 实现本地压缩图片
- 设置VM虚拟机从U盘启动装系统
- 刷沐丝
- 黑马程序员 面向对象(2)
- UVALive - 4725 Airport
- QT 多线程信号与槽(二)
- Struts2结合Jfreechart实现数据报表统计