COCOS2D-X CCScene 与 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更细,添加的功能更多。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值