您的位置:首页 > 移动开发 > Cocos引擎

cocos2d-x 自定义一个场景

2013-07-27 10:44 363 查看
柒哥原创 ,欢迎转载,转载请在明显处注明! 谢谢。
原文地址:点击打开链接

我们都知道,布景是放在场景里面进行显示的。

 

头文件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() -->初始化布景

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  场景 CCScene coco2d-x