cocos2dx一些重要的类



cocos2dx一些重要的类  


一个完整的cocos2d-x项目一定包含下面几个文件:


main.h/cpp:主入口类。

AppDelegate.h/cpp:程序控制类。 

MainScene.h/cpp:第一个进入的主场景类。


main.cpp中创建AppDelegate实例,并设置窗口大小,启动游戏程序:

  1. //实例化一个Cocos2d-x程序对象     
  2. AppDelegate app;    
  3. //创建OpenGL视窗并设置窗口大小   
  4. CCEGLView* eglView = CCEGLView::sharedOpenGLView();    
  5. eglView->setFrameSize(480, 320);  
  6. //运行程序对象   
  7. return CCApplication::sharedApplication()->run();   
//实例化一个Cocos2d-x程序对象   AppDelegate app;   //创建OpenGL视窗并设置窗口大小 CCEGLView* eglView = CCEGLView::sharedOpenGLView();   eglView->setFrameSize(480, 320); //运行程序对象 return CCApplication::sharedApplication()->run(); 

AppDelegate.cppboolAppDelegate::applicationDidFinishLaunching()函数中创建场景并运行:

  1. //初始化导演类指针,并设置OpenGL视窗。   
  2. CCDirector *pDirector= CCDirector::sharedDirector();  
  3. pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());  
  4. //打开并设置FPS。   
  5. pDirector->setDisplayStats(true);  
  6. pDirector->setAnimationInterval(1.0/ 60);  
  7. //创建并运行一个场景,内部设置由内存管理器来进行自动回收,不必手动DELETE    
  8. CCScene *pScene =HelloWorld::scene();  
  9. pDirector->runWithScene(pScene);  
//初始化导演类指针,并设置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()函数创建(这种方法叫静态工厂,比较方便,避免内存泄露):

  1. CCSprite* CCSprite::create(const char*pszFileName)  
  2. {  
  3.    CCSprite *pobSprite = new CCSprite();  
  4.    if (pobSprite &&pobSprite->initWithFile(pszFileName))  
  5.    {  
  6.        pobSprite->autorelease();  
  7.        return pobSprite;  
  8.    }  
  9.    CC_SAFE_DELETE(pobSprite);  
  10.    return NULL;  
  11. }  
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,这种情况,内存就要自己管理和回收。这样的话程序会比较灵活,如某些不确定的情况下又需要使用此片内存,而程序又已经自动回收的话程序就会报错。

定义的管理器指针:

  1. //定时器回调   
  2. #define schedule_selector(_SELECTOR)(SEL_SCHEDULE)(&_SELECTOR)   
  3. //普通回调   
  4. #define callfunc_selector(_SELECTOR)(SEL_CallFunc)(&_SELECTOR)   
  5. #define callfuncN_selector(_SELECTOR)(SEL_CallFuncN)(&_SELECTOR)   
  6. #define callfuncND_selector(_SELECTOR)(SEL_CallFuncND)(&_SELECTOR)   
  7. #define callfuncO_selector(_SELECTOR)(SEL_CallFuncO)(&_SELECTOR)   
  8. //菜单类回调   
  9. #define menu_selector(_SELECTOR)(SEL_MenuHandler)(&_SELECTOR)   
  10. //事件类回调   
  11. #define event_selector(_SELECTOR)(SEL_EventHandler)(&_SELECTOR)   
  12. #define compare_selector(_SELECTOR)(SEL_Compare)(&_SELECTOR)  
//定时器回调 #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、定义计划更新的选择器:

  1. schedule(SEL_SCHEDULE selector);//每帧都检测   
  2. schedule(SEL_SCHEDULE selector, floatinterval);//隔一定时间调用   
  3. schedule(SEL_SCHEDULE selector, floatinterval, unsigned intrepeat, float delay);//重复执行动作,直到得到kCCRepeatForever的delay  
  4. scheduleOnce(SEL_SCHEDULE selector, floatdelay);//只回调一次  
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要占少的内存。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值