cocos2d-x 基本概念的学习

cocos2d-x 基本概念的学习

基本元素

  • 我们把内容相对不变的游戏元素成为场景,游戏在场景之间的切换称为流程控制CCScene
  • 是场景之下的游戏元素。CCLayer
  • 精灵属于层,是场景中的课件图形。如主角。CCSprite
  • 节点渲染树CCNode

    一旦建立起渲染树,组织复杂的场景就变得十分简单。我们赋予每个节点一系列属性,包括节点相对于父节点的位置、旋转角度、缩放比例、和变形参数等。我们只需要考虑节点相对于父节点的属性,就可以创建复杂的对象或者动作。(这么说的话,实现血条也就可以用这个方法)

  • 动作动画。动作:CCAction CCActionInterval CCActionInstant。动画:帧。使用多个动画帧创建动画序列。 CCAnimation, 用帧动画序列创建可作用于精灵的帧动画。 CCAnimate

命名空间和类名称

我们可以发现USING_NS_CC—–#define USING_NS_CC using namespace cocos2d

构造函数和初始化

Cocos2d-x中和C++有点区别:

  1. Cocos2d-x它所有的对象都创建在堆上,然后通过指针引用
  2. 创建Cocos2d-x对象通常有两种方法,一种是首先使用new操作符创建一个未初始化的对象,然后调用init系列方法来初始化。第二种是使用静态的工厂方法直接创建以恶对象。

使用构造函数创建的对象有使用者负责释放。使用工厂方法创建的对象则不需要。

// example 
CCSprite *sprite = new CCSprite();
sprite->initWithFile("*.jpg");
// 第二种使用工厂方法
// example
CCSprite* sprite = CCSprite::spriteWithFile("HelloWorld.png");//旧版本引擎
CCSprite* sprite = CCSprite::create("HelloWorld.png");//新版本引擎
  1. 选择器



shedule_selector(SELECTOR);
menu_selector(SELECTOR);

//usage
CCMenuItemImage *pCloseItem = CCMenuItemImage::Create(

    "CloseNormal.png",
    "CloseSelected.png",
    this,
    menu_selector(HelloWorld::menuCloseCallback)
    );

单例

Cocos2d-x的游戏控制器CCDirector是一个独一无二的控制器,用于切换游戏场景。不可能同时存在CCDirector的实例。


static CCDisplayLinkDirector s_SharedDirector;

CCDirector* CCDirector::sharedDirector(void)
{
    static bool s_bFirstUseDirector = true;
    if (s_bFirstUseDirector)
    {
        s_bFirstUseDirector = false;
        s_ShareDirector.init();
    }
    return &s_ShareDirector;
}

CCDirector::sharedDirector()->replaceScene(newScene);//通过调用replaceScene()来切换到新场景。

Cocos2d-x的只能内存管理技术

实际上这跟Objective-c的风格一致

  1. 引用计数

通过给每个对象维护一个
引用计数器,记录该对象当前被引用的次数。对象增加一次引用时,计数器加1。当引用计数为0时,标志着该对象的生命周期结束,自动触发对象的回收释放。(但是必须注意维护计数)

通过retainCount()方法获得对象当前的引用计数值。在对象通过构造函数创建的时候,该引用值被赋值为1。在其它地方需要引用对象时,我们会调用retain()方法,令其引用计数+1,表示获取该对象的引用权;在引用结束的时候调用release()方法,令其引用计数-1,表示释放该对象的引用权。

还有一个方法是autorelease(),起作用时将对象放入自动回收池(CCAutore-leasePool)。当回收池自身被释放的视乎,他就会对池中的所有对象执行一次release()方法,再循环结束后释放回收池。*所以,即使我们没有手工创建和释放回收池,每一帧结束的时候,自动回收池中的对象也都会被执行一次release()方法。



fish = new CCSprite();
fish->init(); // 1
// CCLog("%d", fish->retainCount()); // 可以得到当前计数的值
fish->retain(); // 2
fish->release(); // 1
fish->autorelease(); // 1

回收池管理器
CCPoolManager* 的push(),pop()操作:创建和释放回收池。


CCPoolManage::sharedPoolManage()->push();
for(int i=0; i
 
  
 
  
    addObject(dataItem); } CCPoolManage::sharedPoolManage()->pop(); 
  
  1. 垃圾回收

你可能感兴趣的:(C++,cocos2d-x)