cocos2d学习之旅(二)

学习了前边的scene layer 等等的知识以后,我们已经对cocos2d有了一个大致的了解和初步的认识,这次我们来学习cocos2d的场景跳转。经过前边的讲解,我就省略掉一些简单的过程。

首先,我们先建立一个新的cocos2d的项目ReplaceScene,由于建立的时候默认有了一个HelloWorld的场景,要实现场景跳转,我们需要至少两个场景,因此我们再建立一个场景,建立场景的知识上一篇已经提及过了,在此就不赘述了。

首先,我们先写.h文件


#ifndef __SecondScene_H__
#define __SecondScene_H__
#include "cocos2d.h"

using namespace cocos2d;
class SecondScene :public Layer{
public:
	static Scene* createScene();
	virtual bool init();
	CREATE_FUNC(SecondScene);
};

#endif

接下来不用说也知道,我们来写cpp文件


#include "SecondScene.h"
Scene* SecondScene::createScene(){
	auto scene = Scene::create();
	auto layer = SecondScene::create();
	scene->addChild(layer);
	return scene;
}

bool SecondScene::init(){
	Label* label = Label::create("Hi,are you mutou?", "Arial", 100);
	label->setPosition(ccp(450, 450));
	this->addChild(label);
	return true;
}

至此,我们就建立好了第二个场景,接下来我们要做的就是场景的切换。跑过第一个程序的都知道,在右下角有一个按钮,按下那个按钮之后应该就进行场景跳转。我们应该修改HelloWorld的menuCloseback函数,这个是关闭按钮的回调函数,点击按钮就会自动调用这个回调函数,因此我们要改变这个函数,在这个函数里实现场景跳转。


void HelloWorld::menuCloseCallback(Ref* pSender)
//切换场景
{
   // Director::getInstance()->end();
	Director::getInstance()->replaceScene(
	//切换时的动画
	TransitionJumpZoom::create(3.0f, SecondScene::createScene()) );

	

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
    exit(0);
#endif
}

其中TransitionJumpZoom是转换场景时的动画效果,还有很多种炫酷的效果就不一一列举了,有兴趣的可以去官网自己看看。


除了调用replaceScene这个函数以外,还有另一种方式,那就是PushPopScene. push和pop正如大家所想的一样,类似于压栈和出栈,就是说老的场景不会在内存中被释放掉对比上一种方法,上一种方法会被内存释放掉旧的场景,pushScened的作用就是用新的场景覆盖当前的场景,当前的场景被暂停但是不会被释放掉,也就是说我们用这个可以 跳转回到原来的场景,而不用再新建一个场景,因此我们需要在跳转到的场景上加一个按钮用来进行回跳,此时我们关注init函数,在函数内加上这样一段代码,我们就加上了一个按钮

//添加按钮
	MenuItem * pCloseItem = MenuItemImage::create(
		"CloseNormal.png", "CloseSelected.png", this, menu_selector(SecondScene::popScene)
		);
	pCloseItem->setPosition(ccp(Director::getInstance()->getWinSize().width -20,20));
	Menu* pmenu = Menu::create(pCloseItem, NULL);
	pmenu->setPosition(Point(0, 0));
	this->addChild(pmenu, 1);

我们还需要新建一个popScene函数来回调上一个场景,代码像这样:

void SecondScene::popScene(Ref* pSender){
	Director::getInstance()->popScene();
}

要注意在.h文件中加上这个函数的函数头

像这样我们就可以进行场景来回来去的自由跳转了,虽然pushpop在汇编语言非常的常用,但是在实际的cocos2d开发中使用的还是很少的,因为类似这种的需求我们多可以用layer来代替实现,而并不用切换场景这么麻烦。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值