一个HelloWorld的流程分析:
APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow)
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
AppDelegate app; //[申请一个app的资源,虽然AppDelegate没有做什么操作,但是从AppDelegate.h类中可以看出AppDelegate继承自cocos2d::CCApplication类]
CCApplication::CCApplication(): m_hInstance(NULL), m_hAccelTable(NULL) //[在cocos2dx/platform/win32下的定义,不同的平台有不同的处理]
m_hInstance = GetModuleHandle(NULL);
m_nAnimationInterval.QuadPart = 0;
CC_ASSERT(! sm_pSharedApplication);
sm_pSharedApplication = this; //[在Application的最原始类中保留着这个app对象资源]
CCEGLView* eglView = CCEGLView::sharedOpenGLView(); //[app需要显示就需要存在一个界面,这里就是获得open gl的view界面]
s_pEglView = new CCEGLView(); //[s_pEglView属于单例资源,只存在一个对象资源]
CCEGLView::CCEGLView()
strcpy(m_szViewName, "Cocos2dxWin32"); //[界面初始化的名字]
s_pEglView->Create()) //[这里去创建opengl,这里会去创建一个窗口]
eglView->setViewName("HelloWorld"); //[设置open gl的view的名字,这里是设置视图的名字,并非是窗口的名字]
strncpy(m_szViewName, pszViewName, sizeof(m_szViewName));
eglView->setFrameSize(480, 320); //[设置open gl的一帧画面的大小]
CCApplication::sharedApplication()->run(); //[这里面会去调用AppDelegate的applicationDidFinishLaunching函数]
applicationDidFinishLaunching())//[初始化自己写的实例,比如HelloWorld,还功能的具体实现在AppDelegate]
pDirector = CCDirector::sharedDirector(); //[获得共享的导演资源]
pEGLView = CCEGLView::sharedOpenGLView(); //[获得共享的opengl资源]
pDirector->setOpenGLView(pEGLView); //[为导演设置一个视图]
CCScene *pScene = HelloWorld::scene(); //[创建一个场景]
scene = CCScene::create(); //[监理一个基本的场景]
layer = HelloWorld::create(); //[建立一个helloworld的层,这里的定义是通过宏来实现的,具体的宏是CREATE_FUNC(HelloWorld);]
pRet = new HelloWorld(); //[申请一个资源]
pRet->init()
CCLayer::init() ) //[HelloWorld层的初始化]
visibleSize = CCDirector::sharedDirector()->getVisibleSize(); //[从导演处获得视图的大小]
origin = CCDirector::sharedDirector()->getVisibleOrigin(); //[从导演处获得坐标的位置]
pCloseItem = CCMenuItemImage::create("CloseNormal.png","CloseSelected.png",this,
menu_selector(HelloWorld::menuCloseCallback)); //[注册一个关闭app的菜单键,这里有个回调函数的注册,这样在叉掉的时候会调用该回调]
pCloseItem->setPosition(ccp(origin.x+visibleSize.width-pCloseItem->getContentSize().width/2,origin.y + pCloseItem->getContentSize().height/2));
CCMenu* pMenu = CCMenu::create(pCloseItem, NULL); //[真正创建菜单的地方]
pMenu->setPosition(CCPointZero); //[设置菜单显示的位置]
this->addChild(pMenu, 1); //[将菜单加入到层中]
CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Arial", 24); //[设置字符串标签的位置]
pLabel->setPosition(ccp(origin.x+visibleSize.width/2,origin.y+visibleSize.height-pLabel->getContentSize().height)); //[设置字符串标签的位置]
this->addChild(pLabel, 1); //[将字符串加入到层中]
CCSprite* pSprite = CCSprite::create("HelloWorld.png"); //[创建一个图片的精灵]
pSprite->setPosition(ccp(visibleSize.width/2+origin.x, visibleSize.height/2+origin.y)); //[设置图片精灵的位置]
this->addChild(pSprite, 0); //[将图片精灵加入到层中]
pDirector->runWithScene(pScene); //[导演在opengl的资源上运行该场景
...... //后面是创建窗口,然后一直死循环在那里,直到退出为止.
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/sunnykiddno1/article/details/41925245