下面创建一个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);
}
});