cocos2d-x 更换场景

6 篇文章 0 订阅
6 篇文章 0 订阅


下面创建一个label属性,用于显示一个菜单选项。

    _itemsMenu = Menu::create();    //一个新的菜单
    auto label = LabelTTF::create("SecondLayer", "Arial", 30.0);   //一个按钮内的文本
    label->setPosition(Point(0,0));     //文本的位置 
    auto menuItem = MenuItemLabel::create(label, CC_CALLBACK_1(HelloWorld::menuSecondSceneCallback, this)); //菜单项的创建
    
    _itemsMenu->addChild(menuItem,4);      //菜单里加入菜单项 
     menuItem->setPosition(Point(100,100));   //按钮相对于菜单的位置
    _itemsMenu->setContentSize(Size(800,800));  //菜单的大小
    _itemsMenu->setPosition(Point(200,200));   //菜单的位置

    
    this->addChild(_itemsMenu,0);


    auto menuItem = MenuItemLabel::create(label, CC_CALLBACK_1(HelloWorld::menuSecondSceneCallback, this));
这句话绑定到方法

void HelloWorld::menuSecondSceneCallback(Object* pSender)
{

    Director::getInstance()->purgeCachedData();   //清空数据
    auto scene = new SecondScene();
    if(scene && scene->initTest()){   //初始化
        scene->runThisTest();
        scene->release();
    }
     
}

下面是对新的场景类的定义。

//SecondScreen.m
#include "SecondScene.h"

void SecondLayer::onEnter()
{
    auto menuItem = LabelTTF::create("New Scene", "Arial", 30.0);
    menuItem->setPosition(Point(100,100));
    addChild(menuItem);
}


bool SecondScene::initTest()
{
    return Scene::init();
}

void SecondScene::runThisTest()
{
    auto layer = new SecondLayer();
    
    layer->onEnter();
    
    this->addChild(layer);
    
    layer->release();
    
    Director::getInstance()->replaceScene(this);
    
}

它的头文件定义是

//
//  SecondScene.h
//  HelloCpp
//
//  Created by ipqhjjybj on 13-11-17.
//
//

#ifndef __HelloCpp__SecondScene__
#define __HelloCpp__SecondScene__

#include "cocos2d.h"

USING_NS_CC;

class SecondLayer : public Layer
{
private:
    Sprite* _backGround;
    Sprite* _layer;
public:

    virtual void onEnter();
};


class SecondScene : public Scene
{

public:
    virtual bool initTest();
    virtual void runThisTest();
};
#endif /* defined(__HelloCpp__SecondScene__) */

下面追加  javaScript 版本




下面都是定义在

var MyLayer = cc.Layer.extend中的

        var TurnItem = cc.MenuItemImage.create(s_CloseNormal,s_CloseSelected,this.onCloseCallBack,this);
        TurnItem.setPosition(size.width-30,size.height-30);
                              
        var subItem1 = cc.MenuItemFont.create("To Scene Left");
        subItem1.setFontSize(18);
        var subItem2 = cc.MenuItemFont.create("To Scene Right");
        subItem2.setFontSize(18);

        var toggleAutoTestItem = cc.MenuItemToggle.create(subItem1,subItem2);
        toggleAutoTestItem.setCallback(this.onToggleAutoTest,this);   // 主要是这句调用回调函数
        
        toggleAutoTestItem.setPosition(size.width-490,20);
        var menu2 = cc.Menu.create(TurnItem,toggleAutoTestItem);
        this.addChild(menu2,1);
onToggleAutoTest:function(){

                              var newScene = new NextScene();
                              newScene.runThisTest();
                              cc.log("ppppp");
    }



下面是要替换成的场景的定义。

var SecondLayer = cc.Layer.extend({
                                  
                                  ctor:function (){
                                  this._super();
                                  cc.associateWithNative(this,cc.Layer);

                                  },
                                  
                                  init:function (){
                                  //super init;
                                  this._super;
                                  // size create
                                  var size = cc.Director.getInstance().getWinSize();
                                  
                                  //create a closemenu
                                  var closeItem = cc.MenuItemImage.create
                                  (
                                   "res/CloseNormal.png",
                                   "res/CloseSelected.png",
                                   function(){cc.log("buttonWasCreated");},
                                   this
                                   );
                                  
                                  closeItem.setAnchorPoint(cc.p(0.5,0.5));
                                  var menu = cc.Menu.create(closeItem);
                                  menu.setPosition(cc.p(0,0));
                                  this.addChild(menu,1);
                                  closeItem.setPosition(cc.p(size.width-20,20));
                                  }
                                  
                                  });
var NextScene = cc.Scene.extend({
                                ctor:function(){
                                this._super();
                                cc.associateWithNative( this, cc.Scene );
                                },
                                runThisTest:function (){
                                var Layer = new SecondLayer();
                                Layer.init();
                                this.addChild(Layer);
                                
                                director.replaceScene(this);
                                }
});



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值