【少年の轨迹】cocos2d-x场景的切换

少年最近刚刚接触到了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>


这就是我新建的一个场景,创建一个精灵并添加到当前的层中( 要用的图片一定要放resource文件夹里)。那么之后来看看如何从HelloWorld转到这个类吧!

在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~哦)


总的来说,我是先创建一个监听器,然后通过导演类才实现的.....不知道还有没有简单的方法,在后续的学习中再看看_(:з」∠)_




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值