Cocos2d-x2.2.3 入口解析

  在此我们使用vs2013打开工cocos2d-x工程程那么我们  我们使用win32的。拿到一个这种程序我们该怎么做呢? 第一步当然是找入口点了。因此 我们在工程目录下直接就可以找到这个win32的路口点。

 

 1 int APIENTRY _tWinMain(HINSTANCE hInstance,
 2                        HINSTANCE hPrevInstance,
 3                        LPTSTR    lpCmdLine,
 4                        int       nCmdShow)
 5 {
 6     UNREFERENCED_PARAMETER(hPrevInstance);
 7     UNREFERENCED_PARAMETER(lpCmdLine);
 8 
 9     // create the application instance
10     AppDelegate app;
11     CCEGLView* eglView = CCEGLView::sharedOpenGLView();
12     eglView->setViewName("MyGame");
13     eglView->setFrameSize(480, 320);
14     return CCApplication::sharedApplication()->run();
15 }

 

像这种庞大的工程 一般来说 机制都不会简单。简单的只有main 函数而已。

在此我们可以看到  AppDelegate app;在栈中定义了一个类  app 类。而

 CCEGLView* eglView = CCEGLView::sharedOpenGLView();
    eglView->setViewName("MyGame");
    eglView->setFrameSize(480, 320);

只是用来 设置 标题和 窗口大小的。

真正的主体出现在

CCApplication::sharedApplication()->run();

那我们就要对这一句进行分析了。

我们很容易可以看出  sharedApplication(); 是一个静态函数。

依据是啥?

CCApplication 它是一个类。

而->run();

这句可以看出什么呢?

从这里我有理由相信。

sharedApplication() 这个静态函数的返回值绝对是一个 类指针。

因此我们从这里可以使用vs2013的 F12键 来对程序进行跟踪。

 static CCApplication* sharedApplication();

在这里找到了 它的定义

CCApplication* CCApplication::sharedApplication()
{
    CC_ASSERT(sm_pSharedApplication);
    return sm_pSharedApplication;
}

CC_ASSERT 这个是一个宏,如果为空就直接退出。

那我们看看那个sm 到底是个什么玩意。

CCApplication * CCApplication::sm_pSharedApplication = 0;

其实它就是一个静态变量。

CCApplication::CCApplication()
: m_hInstance(NULL)
, m_hAccelTable(NULL)
{
    m_hInstance    = GetModuleHandle(NULL);
    m_nAnimationInterval.QuadPart = 0;
    CC_ASSERT(! sm_pSharedApplication);
    sm_pSharedApplication = this;
}

它在构造函数里 对它进行了实现。在构造的时候 使用this

也就是说  CCApplication::sharedApplication()  返回的其实就是指向app的指针。

run();

 

函数会继续向下调用。

会调用到applicationDidFinishLaunching() 这个纯虚基类的一个接口。  

 

posted on 2014-12-10 22:38  ECN14  阅读(141)  评论(0编辑  收藏  举报

导航