Cocos2d-x 是以类似拍摄电影的劳动角色来分类的。包含有导演,场景,布景,精灵(演员),动作
CCDirector: 导演,负责场景的切换以及场景的信息。如宽度,高度,旋转场景内容。
CCScene: 场景. 场景包含有布景,精灵,每场戏的不同,要切换场景。游戏中可分为主界面, 游戏, 分数榜,结束界面等。
CCLayer: 布景. 类似是层的概念,也可来源于PS的层的概念。每一层都带有众多精灵等
CCSprite: 精灵。就是演员的,演员就需要加入到层里面去的。有相应的动作。
CCAction: 动作。精灵的动作。
CCDirector 包含 多个 CCScene
CCScene 包含多个 CCLayer
CCLayer 包含多个 CCSprite
CCSprite 包含多个 CCAction
场景切换:
void CMyScene::Show()
{
CCScene* myScene = CCScene::node();
CMyScene* layer = CMyScene::node();
myScene->addChild(layer);
CCScene* preScene = CCDirector::ShareDirector()->getRunningScene();
if (preScene == null)
{
CCDirecotr::ShareDirector()->runWithScene(myScene);
}
else
{
CCDirecotr::ShareDirector()->replaceScene(myScene);
}
}
CCNode OnEnter()调用:
Class MyLayer:public CCLayer
{
};
1. MyLayer* layer = new MyLayer();
此时,会进行会onEnter回调。
2. CCLayer* layer = MyLayer::node();
此时,不会进行onEnter回调。
两者的区别,这个我也不是特别清楚,有清楚的读者可以补充, 好像是第二种方式会进行自动释放内存。
但是,第一种的话,也是可以autorelease();区别除了调用onEnter(),有待继续研究。
LAYER_NODE_FUNC 定义使用
在初始化类时,则会进行调用生成一个结点,可以查看源码,会进行一次init()的操作。
但是需要的是 类::node();使用才行。
init()与onEnter区别:
init()是类加载时,则可以加载某些资源。
onEnter():则为显示时,可以更新某些数据。
CCNode、CCLayer中的OnEnter()方法
自己定义的CCLayer中重写了onEnter()方法以后, Layer中的update和触摸都失效,后台忘记调用了基类的onEnter()方法,通过源码发过, CCNode和CCLayer中的onEnter做了一些初始化工作。如果下次也碰到类似问题,希望能帮上忙!