柒哥原创 ,欢迎转载,转载请在明显处注明! 谢谢。
原文地址: 点击打开链接
我们都知道,布景是放在场景里面进行显示的。
头文件MyLayer.h
#ifndef __MENUSCENE_H__
#define __MENUSCENE_H__
#include "cocos2d.h"
#include "SimpleAudioEngine.h"
#include "cocos-ext.h"
USING_NS_CC_EXT;
using namespace cocos2d;
class MenuScene:public cocos2d::CCLayer
{
public:
virtual bool init();
static CCScene* scene();
CREATE_FUNC(MenuScene);
};
#endif
上面是我自定义布景的 MenuScene 类,通过这个布景生成场景。这个类要继承自cocos2d::CCLayer,这是一个布景类,构造函数和析构函数都是编译器自动声称的,覆盖父类的init方法。定义一个静态方法,将布景变为场景
CPP文件
#include "MenuScene.h"
#include "cocos-ext.h"
USING_NS_CC_EXT;
using namespace cocos2d;
CCScene* MenuScene::scene()
{
CCScene * scene = NULL;
do
{
scene = CCScene::create();
CC_BREAK_IF(! scene);
//需要定义CREATE_FUNC(MenuScene)宏 ,才有create方法
MenuScene *menu = MenuScene::create();//该create会调到init()
CC_BREAK_IF(!menu);
scene->addChild(menu);//将我们自定义的布景加入到场景
} while (0);
//外界只要调用该方法就可以得到该scene
return scene;
}
bool MenuScene::init()
{
bool bRet = false;
do
{
CC_BREAK_IF(! CCLayer::init());
//添加一个背景
CCSprite * menuBackground = CCSprite::create("menubg.png");
CCSize menuBgSize = menuBackground->getContentSize();
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
menuBackground->setScale(0.4f);
menuBackground->setPosition(ccp(350,200));
this->addChild(menuBackground,0);
bRet = true;
} while (0);
return bRet;
}
使用自定义场景:
void HelloWorld::Go(CCObject *p)
{
CCScene *s=MyLayer::scene();
CCDirector::sharedDirector()->replaceScene(s);
}
调用框架流程:
HelloWorld::Go --> MyLayer::scene() --> MenuScene::create() --> MenuScene::init() -->初始化布景