1:当我们找到一个项目的时候打开编译不通过,有可能是因为版本不同的原因,那么我们如何查看cocos2d-x源码版本
在工程目录当中libcocos2d下面\cocos2dx\cocos2d.cpp
#include "cocos2d.h"
NS_CC_BEGIN
const char* cocos2dVersion()
{
return "cocos2d-x 2.2.6";
}
NS_CC_END
2:工程的入口:
main.cpp下面
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// create the application instance AppDelegate app; CCEGLView* eglView = CCEGLView::sharedOpenGLView(); eglView->setViewName("myHello"); eglView->setFrameSize(480,320); return CCApplication::sharedApplication()->run();
}
工程的真正入口是在:
bool AppDelegate::applicationDidFinishLaunching() {
// initialize director
CCDirector* pDirector = CCDirector::sharedDirector();
CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();
pDirector->setOpenGLView(pEGLView);
// turn on display FPS
pDirector->setDisplayStats(true);
// set FPS. the default value is 1.0/60 if you don't call this
pDirector->setAnimationInterval(1.0 / 60);
// create a scene. it's an autorelease object
CCScene *pScene = HelloWorld::scene();
// run
pDirector->runWithScene(pScene);
return true;
}
几个重要的梳理点:
AppDelegate 私有继承 CCApplication
CCApplication public继承 CCApplicationProtocol
CCApplicationProtocol定义了接口
CCApplication 各个平台的不同逻辑
AppDelegate仅实现CCApplicationProtocol 里的接口,实现了代理功能的局限化。
这里其实用到了代理模式,代理模式的改进;
AppDelegate app;
CCApplication::sharedApplication()->run()
在CCApplication::sharedApplication()里面会把 app对象赋给
CCApplication * sm_pSharedApplication;
这里: 子类对象赋给父类
父类再调用Run函数。Run函数里面调用了applicationDidFinishLaunching()函数,这个函数由AppDelegate实现,整个过程用到了多态的机制。
3:游戏逻辑结构:
一个导演同一时间只能运行一个场景, 一个场景当中, 可以同时加载多个层,
一个层同可以可载多个精灵。层中亦可以加层。
4:锚点:
锚点影响缩放。影响旋转。
锚点好比一个钉子,你要把一张纸钉在墙上,这个钉子你可以放在纸中间,也可以放在纸的左上角右下角等等。总之,锚点不是重心。
上图就好比一张纸,如果你的钉子在左下角,那么左下角是锚点,你把钉子在左下角盯住,那么这张纸旋转也是围绕左下角这个点旋转。