COCOS2D-X CCScene 与 CCLayer 分离细节
2014-04-14 13:54
411 查看
在项目的进行中,特别是代码量大的项目需要更好的组织代码,使代码低耦合,便于管理。
COCOS2D-X建立的游戏项目中,主要的游戏元素是 CCDirector、CCScene、CCLayer、CCSprite等。大量的逻辑代码将在CCScene、CCLayer、CCSprite中处理,所以很有必要将游戏中的场景、层、精灵分离,使代码更清晰。
CCScene:是游戏中很重要的部分,所有的游戏都是通过它来展示。各个场景的切换、场景中的元素、场景的功能等,都应该进行有效的分离。
分离步骤:
1、确定场景作用并相应命名,创建新场景类继承于CCScene。
2、完成 构造函数、析构函数。
3、CREATE_FUNC(CLASS_CCSCENE_NAME) 此方法比较重要,CCScene继承于CCNode,该宏调用的是宏定义的函数,用于创建CLASS对象,及create方法调用的函数方法。
4、virtual bool init():该方法继承于CCNode,主要用于场景类的初始化,如添加层。
5、完成创建此场景的方法。一般是静态方法。通过CCScene类中的create方法创建对象,若创建成功则返回对象。具体代码如下:
CCScene* GameScene::playNewGame()
{
GameScene* scene=NULL;
do
{
//CREATE_FUNC(CLASS_CCSCENE_NAME)
//调用该方法后,会调用 virtual bool init() 方法,对该场景进行完整的初始化,
scene=GameScene::create();
CC_BREAK_IF(! scene);
}while(0);
//返回指定的场景对象
return scene;
}
或者在init函数开始加入代码断
do
{
CC_BREAK_IF(!CCScene::init());
} while (0);
在 AppDelegate 的 applicationDidFinishLaunching 函数中调用create创建场景对象
CCLayer:是游戏中展示的重要部分,单个场景中由一个或多个LAYER组成,所以LAYER的分离更加重要,更加细化功能。
分离步骤:
1、确定场景作用并相应命名,创建新场景类继承于CCLayer。
2、完成 构造函数、析构函数。
3、CREATE_FUNC(CLASS_CCLAYER_NAME) 此方法比较重要,CCLayer继承于CCNode,该宏调用的是宏定义的函数,用于创建CLASS对象,及create方法调用的函数方法。
4、virtual bool init():该方法继承于CCNode,主要用于层类的初始化,如添加层中包含的内容、具体功能等。
bool GameLayer::init()
{
bool bRet = false;
do
{
//判断是否创建成功
CC_BREAK_IF(! CCLayer::init());
//解析TMX地图
map=GameMap::gameMapWithTMXFile("map.tmx");
addChild(map);
//调用Hero类的静态方法创建实例
hero=Hero::heroWithinLayer();
//设置Hero的起始位置
hero->setPosition(map->positionForTileCoord(ccp(1,11)));
//将Hero加入GameLayer
addChild(hero);
//4.初始化定时器为每帧调用,更新场景位置
schedule(schedule_selector(GameLayer::update));
bRet = true;
} while (0);
return bRet;
}
其实上 CCScene 与 CCLayer 的创建是比较相近的,CCScene 在init中添加CCLayer。通过调用父类的 create方法创建对象,通过判断init方法返回值判断是否初始化成功。只是CCLayer更细,添加的功能更多。
COCOS2D-X建立的游戏项目中,主要的游戏元素是 CCDirector、CCScene、CCLayer、CCSprite等。大量的逻辑代码将在CCScene、CCLayer、CCSprite中处理,所以很有必要将游戏中的场景、层、精灵分离,使代码更清晰。
CCScene:是游戏中很重要的部分,所有的游戏都是通过它来展示。各个场景的切换、场景中的元素、场景的功能等,都应该进行有效的分离。
分离步骤:
1、确定场景作用并相应命名,创建新场景类继承于CCScene。
2、完成 构造函数、析构函数。
3、CREATE_FUNC(CLASS_CCSCENE_NAME) 此方法比较重要,CCScene继承于CCNode,该宏调用的是宏定义的函数,用于创建CLASS对象,及create方法调用的函数方法。
4、virtual bool init():该方法继承于CCNode,主要用于场景类的初始化,如添加层。
5、完成创建此场景的方法。一般是静态方法。通过CCScene类中的create方法创建对象,若创建成功则返回对象。具体代码如下:
CCScene* GameScene::playNewGame()
{
GameScene* scene=NULL;
do
{
//CREATE_FUNC(CLASS_CCSCENE_NAME)
//调用该方法后,会调用 virtual bool init() 方法,对该场景进行完整的初始化,
scene=GameScene::create();
CC_BREAK_IF(! scene);
}while(0);
//返回指定的场景对象
return scene;
}
或者在init函数开始加入代码断
do
{
CC_BREAK_IF(!CCScene::init());
} while (0);
在 AppDelegate 的 applicationDidFinishLaunching 函数中调用create创建场景对象
CCLayer:是游戏中展示的重要部分,单个场景中由一个或多个LAYER组成,所以LAYER的分离更加重要,更加细化功能。
分离步骤:
1、确定场景作用并相应命名,创建新场景类继承于CCLayer。
2、完成 构造函数、析构函数。
3、CREATE_FUNC(CLASS_CCLAYER_NAME) 此方法比较重要,CCLayer继承于CCNode,该宏调用的是宏定义的函数,用于创建CLASS对象,及create方法调用的函数方法。
4、virtual bool init():该方法继承于CCNode,主要用于层类的初始化,如添加层中包含的内容、具体功能等。
bool GameLayer::init()
{
bool bRet = false;
do
{
//判断是否创建成功
CC_BREAK_IF(! CCLayer::init());
//解析TMX地图
map=GameMap::gameMapWithTMXFile("map.tmx");
addChild(map);
//调用Hero类的静态方法创建实例
hero=Hero::heroWithinLayer();
//设置Hero的起始位置
hero->setPosition(map->positionForTileCoord(ccp(1,11)));
//将Hero加入GameLayer
addChild(hero);
//4.初始化定时器为每帧调用,更新场景位置
schedule(schedule_selector(GameLayer::update));
bRet = true;
} while (0);
return bRet;
}
其实上 CCScene 与 CCLayer 的创建是比较相近的,CCScene 在init中添加CCLayer。通过调用父类的 create方法创建对象,通过判断init方法返回值判断是否初始化成功。只是CCLayer更细,添加的功能更多。
相关文章推荐
- Cocos2d-x 之场景类(CCScene)
- cocos2d-x学习笔记04:CCScene场景切换
- Cocos2d-x学习笔记之CCScene、CCLayer、CCSprite的默认坐标和默认锚点实验
- Cocos2d-x初入学堂(11)-->CCScene场景切换
- cocos2d-X学习之主要类介绍:场景(CCScene)
- (转)【iOS-cocos2d-X 游戏开发之十】自定义CCSprite/Layer/CCNode及静态类模版&自定义类细节说明&Cocos2dx触屏事件讲解
- cocos2d-x onMouseMove中CCTouch *pTouch参数的细节
- cocos2d-x CCScene 场景对象如何自动释放
- cocos2d-replace动画-CCTransitionScene
- cocos2d-x 常用代码、高频使用代码【CCLayer、CCEditBox编辑框、CCControlButton按钮、CCLabelTTF标签、CCSpriteBatchNode渲染、CCMen】
- 【5】coco2d-x核心类之CCScene与CClayer
- Cocos2d-x CCNode,CCLayer,CCScene分析
- cocos2d-x CCNode,CCLayer,CCScene分析-沈大海cocos2d-x教程12
- cocos2d-x CCScene注册触摸事件
- cocos2d ccLayer响应触摸事件方法:CCStandardTouchDelegate 与 CCTargetedTouchDelegate
- IOS cocos2d学习笔记-<七>CCTransitionScene场景切换动画
- 仿照CREATE_FUNC实现CCLayer中的返回CCScene* 的静态函数,宏包装成CREATE_SCENE(XXLayer)
- cocos2d-x CCNode,CCLayer,CCScene分析-沈大海cocos2d-x教程12
- cocos2d-x的CCDirector::replaceScene(CCScene *pScene) 使用注意
- Cocos2d之CCScene