代码跟踪--初学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(); 其他就是各种数据的初始化了 以及 键盘 触摸屏 特效系统 等等各种初始化


好吧 我又忘记从哪看到这了,明天在看吧。


0 0
原创粉丝点击