Cocos2d-x 是以Cocos2d-iphone 移植版本,是以我们中国为主导的。
首先先来说明Cocos2d-x的五个主导类。
Cocos2d-x 是以类似拍摄电影的劳动角色来分类的。包含有导演,场景,布景,精灵(演员),动作
CCDirector: <wbr>导演,负责场景的切换以及场景的信息。如宽度,高度,旋转场景内容。</wbr>
CCScene: <wbr><wbr>场景. 场景包含有布景,精灵,每场戏的不同,要切换场景。游戏中可分为主界面, 游戏, 分数榜,结束界面等。</wbr></wbr>
CCLayer: <wbr><wbr>布景. 类似是层的概念,也可来源于PS的层的概念。每一层都带有众多精灵等</wbr></wbr>
CCSprite: <wbr><wbr>精灵。就是演员的,演员就需要加入到层里面去的。有相应的动作。</wbr></wbr>
CCAction: <wbr><wbr>动作。精灵的动作。</wbr></wbr>
CCDirector 包含 多个 <wbr>CCScene</wbr>
CCScene 包含多个 <wbr>CCLayer</wbr>
CCLayer 包含多个 <wbr>CCSprite</wbr>
CCSprite 包含多个 <wbr>CCAction</wbr>
场景切换:
void CMyScene::Show()
{
CCScene* myScene = CCScene::node();
CMyScene* layer = <wbr>CMyScene::node();</wbr>
myScene->addChild(layer);
CCScene* preScene = CCDirector::ShareDirector()->getRunningScene();
if (preScene <wbr>== null)</wbr>
{
CCDirecotr::ShareDirector()->runWithScene(myScene);
}
else
{
CCDirecotr::ShareDirector()->replaceScene(myScene);
}
}
CCNode OnEnter()调用:
Class MyLayer:public CCLayer
{
};
1. <wbr>MyLayer* layer = new <wbr>MyLayer();</wbr></wbr>
此时,会进行会onEnter回调。
2. CCLayer* layer <wbr>= MyLayer::node();</wbr>
此时,不会进行onEnter回调。
两者的区别,这个我也不是特别清楚,有清楚的读者可以补充, 好像是第二种方式会进行自动释放内存。
但是,第一种的话,也是可以autorelease();区别除了调用onEnter(),有待继续研究。
LAYER_NODE_FUNC 定义使用
在初始化类时,则会进行调用生成一个结点,可以查看源码,会进行一次init()的操作。
但是需要的是 类::node();使用才行。
init()与onEnter区别:
init()是类加载时,则可以加载某些资源。
onEnter():则为显示时,可以更新某些数据。
头文件里还有一个奇怪的东西LAYER_NODE_FUNC(CMyFirstScene); 这个宏在引擎内部(CCLayer.h)被定义。主要是为自己建的层增加一个node()函数,node()函数的作用是new一个实例,并将它加入autorelease,也就是所有由node()函数得来的指针,都不需要手动的释放(除非自己想要)。
CCNode、CCLayer中的OnEnter()方法
自己
定义的
CCLayer中
重写了onEnter()方法以后, Layer中的updat
e和触摸都失效,后台忘
记调用
了基
类
的onEnter(
)
方
法
,通过
源码发过
,<wbr></wbr>
CCNode和CCLayer中的onEnter做了一些初始化工作。
如果
下
次
也
碰
到
类似问题,希望能帮上忙!
经测试,的确是如此的。继承了onEnter以后,按键是无法使用的。
CCNode-+ CCScene
|
+ CCLayer
|
+ CCSprite
|
+ CCMenu
任何可画的东西都是CCNode,CCNode的基本特点:
1. 一个CCNode可以包含多个CCNode . CCNode的基本操作:addChild, getChildByTag, removeChild .
2. 可以实现周期性的回调 . schedule, unschedule .
3. CCNode可以执行动作: runAction, stopAction .
我们写一个CCNode的子类意味着什么呢?
- 覆盖初始化init.
- "schedule callbacks" , (我们子类化一个CCNode, 回调函数将有什么影响呢?)
- 覆盖node的绘制.
CCNode有哪些属性呢?
- position
- scale(x, y) 默认的是x=1, y=1;
- rotation (in degrees, clockwise) 旋转;
- CCCamera (an interface to gluLookAt), 怎么看这个CCNode就由CCCamera来决定. 默认的是CCNode的中心.
- CCGridBase 基本的网格.有什么用呢? 怎么转换呢?
- anchor point 什么叫锚点?
- visible
- size
- z-order
- openGL z position
可以看出, CCNode是一个共通的类, 它表示一个可画的目标, 它可以旋转,可以放大,有观察视角属性,有位置,可不可见,
有大小,并且可以与OpneGL 关联起来. 其中有3个属性是难以理解的: CCGrideBase, anchor point, z-order.
--------------------------------------------
现在的问题就是:
CCScene, CCLayer, CCMenu, CCSprite 他们都是CCNode 的子类, 他们在功能上有什么明显的不同?
CCLayer主要是处理 事件接收, 加速响应.
CCMenu 在运行时添加MenuItem.
CCScene与CCNode差不多, 只是在锚点上有点不同.
CCSprite来处理2d的图像.