场景的切换
/**
* 以下代码实现的是切换场景的目的,
* 点击文本框中的字体时,切换场景,有图片
*/
//1.修改bool HelloWorld::init()方法
//2.创建ImageScene方法,c++
//3.将创建的场景添加到bool HelloWorld::init()中,
//4.在最开始的位置上添加#include "ImageScene.h"
//5.别忘了将自己创建的方法添加到xcode的编译环境中,不然运行时异常
//6.点击项目,点击Build Phases,找到Compile Sources,将自建的cpp添加进去
bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if ( !Layer::init() )
{
return false;
}
/**
* 以下代码实现的是切换场景的目的,
* 点击文本框中的字体时,切换场景,有图片
*/
//获得可见区域的大小
Size visibleSize = Director::getInstance()->getVisibleSize();
//添加文本框,文本内容,字体种类,字体的大小
LabelTTF *label = LabelTTF::create("show next scene", "Courier", 36);
addChild(label);//将文本添加到层中
//将文本放在中间
label->setPosition(visibleSize.width/2, visibleSize.height/2);
//为label设置事件监听器
// 1.创建监听器
EventListenerTouchOneByOne *listener = EventListenerTouchOneByOne::create();
// 2.让listener->onTouchBegan 指向一个要执行的闭包函数
//[捕获label变量]
listener->onTouchBegan = [label](Touch *t, Event *e){
//判断,label->边界.包括(触摸点),说明点击的是label,则执行一个新的Scene
if (label->getBoundingBox().containsPoint(t->getLocation())) {
//运行新创建的场景
Director::getInstance()->replaceScene(ImageScene::createScene());
}
return false;
};
// 3.添加事件监听器
//参数(监听器,节点即要监听的节点)
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, label);
return true;
}
ImageScene.h
//
// ImageScene.h
// L01StartScene
//
// Created by Mac OS 10.9.3 on 15-3-26.
//
//
#ifndef __L01StartScene__ImageScene__
#define __L01StartScene__ImageScene__
#include <iostream>
#include <cocos2d.h>//引入cocos2d的头文件
USING_NS_CC; //使用cocos2d的命名空间
//创建一个ImageScene的类,继承与Layer
class ImageScene : public Layer {
public:
virtual bool init();//创建ImageScene的初始化方法
static Scene* createScene();//创建一个scene的方法
CREATE_FUNC(ImageScene);//创建ImageScene的create()方法
};
#endif /* defined(__L01StartScene__ImageScene__) */
ImageScene.cpp
//
// ImageScene.cpp
// L01StartScene
//
// Created by Mac OS 10.9.3 on 15-3-26.
//
//
#include "ImageScene.h"
//实现.h中的创建场景的方法
Scene* ImageScene::createScene(){
Scene* scene = Scene::create();//创建一个场景
ImageScene* layer = ImageScene::create();//创建一个层
scene->addChild(layer);//将创建的层添加进场景中
return scene;
}
//实现初始化方法
bool ImageScene::init(){
//获得可见区域的大小
Size size = Director::getInstance()->getVisibleSize();
Sprite* sprite = Sprite::create("HelloWorld.png");//创建一个图片
//将图片放在居中的位置
sprite->setPosition(Point(size.width / 2, size.height / 2));
addChild(sprite);//添加进去
return true;//如果返回的是false则认为类创建不成功,这不是我们所要的
}