【小编推荐】cocos2d 添加菜单(vs2012)

2014-09-06   |   发布者:梁国芳   |   查看:3320次

cocos2d
如何给 cocos2d  增加一些菜单呢。比如帮助 等按钮。

1.在classes   右键  添加新建项  QQ截图20140906191457


选择头文件。位置改成 项目的 Classes 目录下。


头文件创建好后。开始创建  cpp文件。   同上方法一些样。  文件类型选择.cpp.   


2.创建好后。先放一边,一会再完善。。先在HelloWorldScene.cpp中增加 菜单 。
源码 已有菜单   close 
 auto closeItem = MenuItemImage::create(
                                           "CloseNormal.png",
                                           "CloseSelected.png",
                                           CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
    
closeItem->setPosition(Point(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,
                                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"   。就可以   场景跳转了。