cocos2dx一些重要的类
一个完整的cocos2d-x项目一定包含下面几个文件:
main.h/cpp:主入口类。
AppDelegate.h/cpp:程序控制类。
MainScene.h/cpp:第一个进入的主场景类。
main.cpp中创建AppDelegate实例,并设置窗口大小,启动游戏程序:
- //实例化一个Cocos2d-x程序对象
- AppDelegate app;
- //创建OpenGL视窗并设置窗口大小
- CCEGLView* eglView = CCEGLView::sharedOpenGLView();
- eglView->setFrameSize(480, 320);
- //运行程序对象
- return CCApplication::sharedApplication()->run();
AppDelegate.cpp在boolAppDelegate::applicationDidFinishLaunching()函数中创建场景并运行:
- //初始化导演类指针,并设置OpenGL视窗。
- CCDirector *pDirector= CCDirector::sharedDirector();
- pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());
- //打开并设置FPS。
- pDirector->setDisplayStats(true);
- pDirector->setAnimationInterval(1.0/ 60);
- //创建并运行一个场景,内部设置由内存管理器来进行自动回收,不必手动DELETE
- CCScene *pScene =HelloWorld::scene();
- pDirector->runWithScene(pScene);
MainScene.cpp在AppDelegate中调用此场景,通过CCScene类的一个静态方法中创建并加入内存自动回收机制,在MainScene中实现父类定义的init函数对层、触发事件等初始化。而且,此类还继承于CCLayer,即直接可以在此类中应用贴图、执行动作,已经设置触摸和重力感应等。
一些重要的类:
CCObject类
这个类是其他大部分类的基类。主要三个功能:一是引用计数器,进行内存计数,设定友元类CCAutoreleasePool来对CCObject实例的对象内存进行管理;二是通过脚本ID访问相应的脚本;三是定义了一些宏来取得回调函数的指针,包括了定时器响应、普通回调函数、菜单响应函数、事件响应函数。
所以,在许多类中,如创建一个sprite,可以使用static类型的creat()函数创建(这种方法叫静态工厂,比较方便,避免内存泄露):
- CCSprite* CCSprite::create(const char*pszFileName)
- {
- CCSprite *pobSprite = new CCSprite();
- if (pobSprite &&pobSprite->initWithFile(pszFileName))
- {
- pobSprite->autorelease();
- return pobSprite;
- }
- CC_SAFE_DELETE(pobSprite);
- return NULL;
- }
则在其函数内部加入了自动回收内存的autorelease()。
也可以自己new一个对象,然后直接通过initWithFile()来创建sprite,这种情况,内存就要自己管理和回收。这样的话程序会比较灵活,如某些不确定的情况下又需要使用此片内存,而程序又已经自动回收的话程序就会报错。
定义的管理器指针:
- //定时器回调
- #define schedule_selector(_SELECTOR)(SEL_SCHEDULE)(&_SELECTOR)
- //普通回调
- #define callfunc_selector(_SELECTOR)(SEL_CallFunc)(&_SELECTOR)
- #define callfuncN_selector(_SELECTOR)(SEL_CallFuncN)(&_SELECTOR)
- #define callfuncND_selector(_SELECTOR)(SEL_CallFuncND)(&_SELECTOR)
- #define callfuncO_selector(_SELECTOR)(SEL_CallFuncO)(&_SELECTOR)
- //菜单类回调
- #define menu_selector(_SELECTOR)(SEL_MenuHandler)(&_SELECTOR)
- //事件类回调
- #define event_selector(_SELECTOR)(SEL_EventHandler)(&_SELECTOR)
- #define compare_selector(_SELECTOR)(SEL_Compare)(&_SELECTOR)
CCNode类
cocos2d-x是树状继承,则此类是所有节点的父类。
CCNode是一个主要元素,任何需要绘制和包涵子节点的对象都需要继承CCNode。常用的CCNode之类有:CCScene,CCLayer, CCSprite, CCMenu.
主要功能特性:
1、addChild(CCNode*child, int zOrder, int tag):在当前实例中添加子类,可以通过重载方法选择添加zOrder(深度、即绘制的先后顺序),tag(标识,可以通过此标识找到该子类做修改或删除操作)。
2、取得位置 float getPositionX(void);float getPositionY(void);、设置位置voidsetPosition(float x, floaty);设置绘制状态的可见性:setVisible(bool visible);
3、定义计划更新的选择器:
- schedule(SEL_SCHEDULE selector);//每帧都检测
- schedule(SEL_SCHEDULE selector, floatinterval);//隔一定时间调用
- schedule(SEL_SCHEDULE selector, floatinterval, unsigned intrepeat, float delay);//重复执行动作,直到得到kCCRepeatForever的delay
- scheduleOnce(SEL_SCHEDULE selector, floatdelay);//只回调一次
CCDirector类
这个被称为导演类,是cocos2dX的核心,负责游戏资源的调度、出场、结束,是一个单件。
具体作用如下:
1.访问和改变场景(Scene)
2.访问cocos2dx的配置细节(如OpenGL)
3.访问视图
4.暂停恢复和结束游戏
CCScheduler类
在cocos2d-x的整个流程中,CCSchedule机制起到了心脏的作用(定时器产生的时间事件,touch事件,普通回调事件等),为游戏的运行提供动力。
这里有两种不同形式的回调(selectors):
update selector:每帧都在被调用,可以定义优先级,
custom selector:一个自定义的selector也在没帧调用,也可以自定义时间间隔。
在尽可能的情况下 custom selector尽量避免用。但是如果为了更快,自定义的selector比使用update selector要占少的内存。