场景的切换

/**

 * 以下代码实现的是切换场景的目的,

 * 点击文本框中的字体时,切换场景,有图片

 */

//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则认为类创建不成功,这不是我们所要的

}

原文地址:https://www.cnblogs.com/dudu580231/p/4373554.html