少年最近刚刚接触到了cocos2d-x,最近学会了如何切换场景,这里来记叙一下自己的方法,可能有些笨_(:з」∠)_
首先,既然是要做到场景的切换,那么最少要有两个场景(这不是废话),那么首先来新建一个场景,
<span style="font-size:14px;">#include "NewWorld.h"
USING_NS_CC;
Scene* newworld::createScene()
{
//创建了一个场景
Scene *scene = Scene::create();
//创建了一个层
Layer *layer = newworld::create();
//将这个层添加到场景中
scene->addChild(layer);
//返回这个场景
return scene;
}
bool newworld::init()
{
//通过导演来获取到屏幕尺寸
Size visibleSize2 = Director::getInstance()->getVisibleSize();
//创建一个精灵,这里用来显示图片
Sprite *sprite = Sprite::create("miku.jpg");
addChild(sprite);//添加到当前层
//设置显示在屏幕的正中间
sprite->setPosition(visibleSize2.width/2,visibleSize2.height/2);
//如果返回false就代表以上代码全都无效了┑( ̄Д  ̄)┍
return true;
}</span>
在HelloWorld中,我首先创建了一个标签,然后通过EventListenerTouchOneByOne(一次执行一个事件的监听器)来为这个标签添加了事件监听器并通过getBoundingBox().containsPoint(t->getLocation()来获取边界值,所以只有点击这个标签的时候才会被监听。然后就是通过导演类获取时间派发器并添加之前创建的监听事件。以下是具体的代码:
#include "HelloWorldScene.h"
#include "NewWorld.h"
USING_NS_CC;
Scene* HelloWorld::createScene()
{
// 'scene' is an autorelease object
auto scene = Scene::create();
// 'layer' is an autorelease object
auto layer = HelloWorld::create();
// add layer as a child to scene
scene->addChild(layer);
// return the scene
return scene;
}
// on "init" you need to initialize your instance
bool HelloWorld::init()
{
//
// 1. super init first
if ( !Layer::init() )
{
return false;
}
Size visibleSize = Director::getInstance()->getVisibleSize();
//建立了一个标签
Label *label = Label::create("Click to entry the new world","宋体",45);
//将标签添加到当前层
addChild(label);
//设置标签的位置,设置为显示在屏幕正中间
label->setPosition(visibleSize.width/2,visibleSize.height/2);
EventListenerTouchOneByOne *listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = [label](Touch *t,Event *e){
if (label->getBoundingBox().containsPoint(t->getLocation()))
{
Director::getInstance()->replaceScene(TransitionCrossFade::create(5,newworld::createScene()));
}
return false;
};
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener,label);
return true;
}
期中有一个闭包函数,需要将要用到的组件放到[]里面,如上面的:[label]!啊,刚才忘了说,我在这两个场景的转换中加了特效~,其实当初让我用这个类的时候我是拒绝的,为什么呢,因为不能你说让我用我就用,我得先了解一下!
TransitionCrossFade是TransitionScene类的类,TransitionScene继承自Scene,是一个场景转换的基类,有许多种特效,见一下API文档的截图:(每一个都是一种特效,各种各样的Duang~哦)
总的来说,我是先创建一个监听器,然后通过导演类才实现的.....不知道还有没有简单的方法,在后续的学习中再看看_(:з」∠)_