cocos2d-x 基本概念的学习

cocos2d-x 基本概念的学习

基本元素

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

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

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

###命名空间和类名称### 咱们能够发现USING_NS_CC-----<code>#define USING_NS_CC using namespace cocos2d</code>学习

###构造函数和初始化### Cocos2d-x中和C++有点区别:动画

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

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

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

<pre><code> shedule_selector(SELECTOR); menu_selector(SELECTOR); //usage CCMenuItemImage *pCloseItem = CCMenuItemImage::Create( "CloseNormal.png", "CloseSelected.png", this, menu_selector(HelloWorld::menuCloseCallback) ); </code></pre>spa

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

<pre><code> 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()来切换到新场景。 </code></pre>code

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

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

  1. 引用计数

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

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

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

<pre><code> fish = new CCSprite(); fish->init(); // 1 // CCLog("%d", fish->retainCount()); // 能够获得当前计数的值 fish->retain(); // 2 fish->release(); // 1 fish->autorelease(); // 1 </code></pre>

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

<pre><code> CCPoolManage::sharedPoolManage()->push(); for(int i=0; i<n; i++) { CCString *dataItem = CCString::createWithFormat("%d", Data[i]); stringArray->addObject(dataItem); } CCPoolManage::sharedPoolManage()->pop(); </code></pre>

  1. 垃圾回收
相关文章
相关标签/搜索