Ubuntu Cocos2dx 学习笔记——Cocos2dx设计模式

转载请表明出处:http://blog.csdn.net/tim_shadow/article/details/23258203

设计模式介绍:

    Cocos2dx 的设计模式大概可以类似于一部电影,包括几个部分:
        1.CCDirector(大导演)
  2.CCScene  (场景)
  3.CCLayer(层)
  4.CCSprite (演员精灵)
    一个游戏(电影)一般只有一个CCDirector(大导演),CCDirector(大导演)安排每一个个的CCScene(场景),每一个CCScene(场景)都分为很多的CCLayer(层),很多的CCLayer(层)组成一个完整的CCScene(场景),在CCLayer(层)上有很多的CCSprite(演员精灵)它们有不同的样式,不同的动作,不同的位置,还有一套将他们联系到一起的一套规则,这就组成了一个完整的游戏。
    

CCDirector (大导演)

    CCDirector(大导演)为单列模式,所以,在项目中通过
CCDirector* pDirector = CCDirector::sharedDirector(); 
获取的CCDirector 的引用均为同一个CCDirector对象的引用。
    我们可以通过如下代码来指配CCDirector(大导演)的一些属性:
	//初始化CCDirector
	CCDirector* pDirector = CCDirector::sharedDirector();
	CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();
	//设置显示视图
	pDirector->setOpenGLView(pEGLView);
	//设置是否显示FPS信息
	pDirector->setDisplayStats(false);
	//设FPS,默认为 1.0/60,表示游戏1秒钟最多刷新60次
	pDirector->setAnimationInterval(1.0 / 60);
    //初始化场景信息
	MenuScene *pScene = MenuScene::create();
    //设置初始场景
	pDirector->runWithScene(pScene);
    若想要切换场景,那么可以调用 以下代码:
CCDirector::sharedDirector()->replaceScene(ccScene *ccScene);

CCScene(场景)

     场景的创建方式

           1.直接创建:
  CCScene* scene=CCScene::create();
           2.自定义CCScene
               自定义方法一般都会把场景中的CCLayer(层)在 CCScene::init()方法中添加到场景中
  class MenuScene: public cocos2d::CCScene {
  public:
  	virtual bool init();
  	//利用宏创建原生态的Create方法
  	CREATE_FUNC(MenuScene)
  };
  bool MenuScene::init() {
  	if (!CCScene::init()) {
  		return false;
  	}
  	addChild(MenuLayer::create());
  	return true;
  }
               其中 CREATE_FUNC 为Cocos2d为简化编码者的代码量,还有自动处理对象回收而定义的宏,具体定义为:
  #define CREATE_FUNC(__TYPE__) \
  static __TYPE__* create() \
  { \
      __TYPE__ *pRet = new __TYPE__(); \
      if (pRet && pRet->init()) \
      { \
          pRet->autorelease(); \
          return pRet; \
      } \
      else \
      { \
          delete pRet; \
          pRet = NULL; \
          return NULL; \
      } \
  }

CCLayer(层)

    层的创建方式

class MenuLayer: public cocos2d::CCLayer {
public:
	virtual bool init();
	//利用宏创建原生态的Create方法
                  CREATE_FUNC(MenuLayer)
};
bool MenuLayer::init() {
	if (!CCLayer::init()) {
		return false;
	}         
        return true;
}
也可以:
class GameLayer: public cocos2d::CCLayerColor {
public:
	virtual bool init();
	//
	CREATE_FUNC(GameLayer)
};
bool GameLayer::init() {
	if (!CCLayerColor::initWithColor(ccc4(0, 0, 255, 255))) {
		return false;
	}
        return true;
}

一般在Layer的init方法中添加 CCSprite (演员精灵),并且设置动作等。
class MenuLayer: public cocos2d::CCLayer {
public:
	virtual bool init();
	//利用宏创建原生态的Create方法
	CREATE_FUNC(MenuLayer)
	void menuStartGame(CCObject* cObj);
	void menuExitGame(CCObject *cObj);
};
bool MenuLayer::init() {
	if (!CCLayer::init()) {
		return false;
	}
	CCSize visiblesize = CCDirector::sharedDirector()->getVisibleSize();
	//添加开始游戏按钮
	CCLabelTTF* startGameTTF = CCLabelTTF::create("Start", "Artial", 30);
	startGameTTF->setColor(ccc3(0, 255, 0));
	CCMenuItemLabel *startGameLabel = CCMenuItemLabel::create(startGameTTF,
			this, menu_selector(MenuLayer::menuStartGame));
	CCMenu* startGameMenu = CCMenu::create(startGameLabel, NULL);
	startGameMenu->setPosition(
			ccp(visiblesize.width/2,visiblesize.height/2+20));
	addChild(startGameMenu);

	//添加退出按钮
	CCLabelTTF* exitGameTTF = CCLabelTTF::create("Exit", "Artial", 30);
	exitGameTTF->setColor(ccc3(255, 0, 0));
	CCMenuItemLabel *exitGameLabel = CCMenuItemLabel::create(exitGameTTF, this,
			menu_selector(MenuLayer::menuExitGame));
	CCMenu* exitGameMenu = CCMenu::create(exitGameLabel, NULL);
	exitGameMenu->setPosition(ccp(visiblesize.width/2,visiblesize.height/2-20));
	addChild(exitGameMenu);

	return true;
}

void MenuLayer::menuStartGame(CCObject* pSender) {
	CCDirector::sharedDirector()->replaceScene(GameScene::create());
}

void MenuLayer::menuExitGame(CCObject* pSender) {
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) || (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
	CCMessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
#else
	CCDirector::sharedDirector()->end();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
	exit(0);
#endif
#endif
}
其中以下代码为Cocos2d的固定退出模式
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) || (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
	CCMessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
#else
	CCDirector::sharedDirector()->end();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
	exit(0);
#endif
#endif


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值