头文件创建好后。开始创建 cpp文件。 同上方法一些样。 文件类型选择.cpp.
CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
origin.y + closeItem->getContentSize().height/2));
我们在下面增加菜单项。
//创建新的菜单 。
auto gameItem = MenuItemFont::create("Start",CC_CALLBACK_1(HelloWorld::menuCloseCallback,this));
auto helpItem = MenuItemFont::create("Help",CC_CALLBACK_1(HelloWorld::menuCloseCallback,this));
auto aboutItem = MenuItemFont::create("About",CC_CALLBACK_1(HelloWorld::menuCloseCallback,this));
gameItem->setPosition(Point(origin.x + visibleSize.width/2 - closeItem->getContentSize().width/2 ,300));
helpItem->setPosition(Point(origin.x + visibleSize.width/2 - closeItem->getContentSize().width/2 ,250));
aboutItem->setPosition(Point(origin.x + visibleSize.width/2 - closeItem->getContentSize().width/2 ,200));
gameItem->setColor(Color3B::YELLOW);
helpItem->setColor(Color3B::YELLOW);
aboutItem->setColor(Color3B::YELLOW);
// create menu, it's an autorelease object
auto menu = Menu::create(closeItem,aboutItem,helpItem,gameItem, NULL);

=========================================
这时点击start help about 都会退出程序。 因为都执行了回调函数 void HelloWorld::menuCloseCallback(Ref* pSender)。
怎么去区分下。?
helpItem->setTag(12); 设置一个标志。
closeItem->setTag(10);
gameItem->setTag(11);
helpItem->setTag(12);
aboutItem->setTag(13);
然后就可以区分回调函数了。
回调函数改为。
void HelloWorld::menuCloseCallback(Ref* pSender)
{
MenuItem * nowItem = (MenuItem * )pSender;
switch(nowItem->getTag()){
case 10:
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
return;
#endif
Director::getInstance()->end();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
#endif
break;
case 11:
//当 getTag 等于11的时候执行的语句
break;
case 12:
break;
case 13:
break;
}
==========================================
4.以上 closeItem 函数已经完成。也就是 nowItem->getTag() 为 10 的回调函数。
写 GameItem 的回调函数。也就是 nowItem->getTag() 为 11 的回调函数。
Director::getInstance()->replaceScene(GameScene::createScene()); //跳转场景 。跳转到 GameScene中。
因此。还需要在GameScene.cpp 和 GameScene.h中写代码。
GameScene.h
#ifndef GAME_SCENE //如果没有定义GAME_SCENE .就定义。 防止重复定义。
#define GAME_SCENE
#include "cocos2d.h" //引入cocos2d
using namespace cocos2d; //使用cocos2d的命名空间
class GameScene : Layer{ //定义一个游戏的场景类 ,继承Layer。
public:
bool init();
CREATE_FUNC(GameScene);
static Scene * createScene();
};//注意此; c++中有;的。
#endif
GameScene.cpp
#include "GameScene.h"
bool GameScene::init(){
if(!Layer::init()){
return false;
}
auto spbk = Sprite::create("background.png");
this->addChild(spbk);
return true;
}
Scene * GameScene::createScene(){
auto scene = Scene::create();
auto layer = GameScene::create();
scene->addChild(layer); //添加图层
return scene;
}
然后在开始的文件中引入 #include "GameScene.h" 。就可以 场景跳转了。