俗话说:“活到老,学到老”。我还这么年轻,看来要学的还有很多呦<・)))><< 。所以今天呢就学习一下cocos的跳转场景
首先新建一个项目起名:jumpscene 就把HelloWord当做第一个场景,然后绘制按钮实现点击跳转第二个场景。
先在helloWord场景的init中声明一个菜单按钮
//获取尺寸;
Size visiableSize = Director::getInstance()->getVisibleSize();
//声明一个label 显示的文本 字体资源 文本大小;
auto label = Label::createWithSystemFont("this is MyFirstScene", "calibri.ttf", 30);
// HelloWorld::EnterSecondScene是回调函数,参数是: EnterSecondScene(Ref * ref);
//CC_CALLBACK_1 绑定一个函数为回调函数 _1 代表这个函数只有一个参数;
auto menuItem = MenuItemLabel::create(label, CC_CALLBACK_1(HelloWorld::EnterSecondScene, this));
//创建菜单有很多方法 MenuItemLabel 、MenuItemImage 、MenuItemSprite;
auto menu = Menu::create(menuItem, NULL);
this->addChild(menu);
这里面添加了一些关于文本的属性。
写完之后再创建第二个脚本,
首先找到源文件中Classes文件,在里面创建两个文本文档修改名字和后缀名 (.cpp 和 .h),然后回到项目中点击src右键添加现有项目 ,把这两个文件添加进去 ,到此一个新的脚本就创建成功了。或者复制上面的脚本,改一下名字也可以。
然后开始编写第二个脚本; 可以依据脚本一编写 。
.h中:
#include "HelloWorldScene.h"
#include "cocos2d.h"
class SecondScene:public cocos2d:: Layer
{
public:
static cocos2d::Scene * CreateScene();CREATE_FUNC(SecondScene);
virtual bool init();
void EnterFirstScene(Ref * ref);
};
.cpp中:
#include "SecondScene.h"
USING_NS_CC;
cocos2d::Scene * SecondScene::CreateScene()
{
Scene * scene = Scene::create();
SecondScene * layer = SecondScene::create();
scene->addChild(layer);
return scene;
}bool SecondScene::init()
{
if (!Layer::init())
{
return false;
}//图片资源放在res文件夹里面
MenuItemImage * pMenuImage = MenuItemImage::create(
"fen.png", //正常状态的图片;
"xiang.png", //被点击的图片;
this,
menu_selector(SecondScene::EnterFirstScene)); //声明的回调函数;
//设置位置;
pMenuImage->setPosition(
Director::getInstance()->getVisibleSize().width / 3,
Director::getInstance()->getVisibleSize().height / 3);Menu * pMenu = Menu::create(pMenuImage, NULL);
this->addChild(pMenu);return true;
}
然后回到第一个脚本中编写按钮的事件,使其跳转到第二个场景。
//在头文件中声明 ;
void HelloWorld::EnterSecondScene(Ref * ref)
{
//切换场景会有两种方法 ;一种replaceScene 一种是:pushScene ;
//区别在于前者释放了当前场景;
//后者会把当前场景压入栈中保存 pushScene的场景要切换回来只需在子场景中调用popscene ,相当于原来的场景暂停了一会;
//Director::getInstance()->replaceScene(TransitionCrossFade::create
// (1.5f, SecondScene::CreateScene()));Director::getInstance()->pushScene(TransitionPageTurn::create
(1.5f,SecondScene::CreateScene(),true));
}
这样就可以跳转到第二个场景了。然后在第二个脚本.cpp里面写跳回第一场景。
void SecondScene::EnterFirstScene(Ref * ref)
{
Director::getInstance()->replaceScene(TransitionMoveInB::create(1.5f, HelloWorld::createScene()));
}