Cocos2d-x场景MenuItemLabel CC_CALLBACK_1错误

时间:2015-11-02 10:08:16

标签: c++ cocos2d-x-3.0

操作系统:Win10 语言:c ++ Cocos2d-x Ver:3.8.1 工具:Visual Studio 2013

//MainMenuScene.h

#ifndef ProjectV_MainMenuScene_h
#define ProjectV_MainMenuScene_h

#include "cocos2d.h"

class MainMenuScene :public cocos2d::CCLayerColor
{
public:

virtual bool init();

static cocos2d::CCScene *createScene();

CREATE_FUNC(MainMenuScene);

cocos2d::Label *PlayLabel;

void goPlayScene(cocos2d::Ref *pSender);
};


#endif

//MainMenuScene.cpp

#include "MainMenuScene.h"
#include "PlayScene.h"

USING_NS_CC;

CCScene *MainMenuScene::createScene()
{
CCScene *scene = CCScene::create();

MainMenuScene *layer = MainMenuScene::create();

scene->addChild(layer);

return scene;
}

bool MainMenuScene::init()
{
    if (!CCLayerColor::initWithColor(Color4B(255, 255, 255, 255)))
   {
    return false;
   }

PlayLabel = Label::createWithTTF("Play", "fonts/consola.ttf", 18);

PlayLabel->setColor(Color3B::BLACK);

auto PlayBtn = MenuItemLabel::create(
    PlayLabel,
    CC_CALLBACK_1(MainMenuScene::goPlayScene, this));

//我认为CC_CALLBACK_1(MainMenuScene :: goPlayScene,this)意味着在点击或触摸标签时调用goPlayScene(Ref * pSender)

PlayBtn->setPosition(Vec2(240, 100));

auto pMenu = Menu::create(PlayBtn, NULL);
pMenu->setPosition(Vec2::ZERO);

this->addChild(pMenu);

return true;
}

void MainMenuScene::goPlayScene(Ref* pSender)
{
CCScene *pScene = PlayScene::createScene();
TransitionScene *pTransScene = TransitionFade::create(1.0f, pScene, Color3B::WHITE);
Director::getInstance()->replaceScene(pTransScene);
}

我不知道为什么当我点击标签

时功能不会调用

1 个答案:

答案 0 :(得分:0)

您未在调用函数

中传递参数
CC_CALLBACK_1(MainMenuScene::goPlayScene, this)

您需要从Ref* pSender移除void MainMenuScene::goPlayScene(),或在CC_CALLBACK_1(MainMenuScene::goPlayScene, this)之后this添加发件人。