cocos2dx 3.9
cocostudio 3.9
今天用到了按钮的回调方法
回调方法有Click和Touch两种。分别是对应cocos2dx的addClickEventListener和addTouchEventListener.
看代码
//依次对应csb文件的按钮名称
std::string btnName[]={"singlegame_btn","mulgame_btn","music_btn","loadgame_btn","exitgame_btn"};
for(auto n:btnName)
{
auto btn = dynamic_cast<Widget*>(csb->getChildByName(n));
//获取回调函数名称
auto callbackName = btn->getCallbackName();
//获取回调类型
auto callbackType = btn->getCallbackType();
//绑定到相应的函数
this->bindCallback(callbackName,callbackType,btn);
}
然后我们看看bindCallback函数
void MenuScene::bindCallback(const std::string&callbackName,const std::string&callbackType,Widget*widget)
{
//单人游戏按钮
if(callbackName == "singleGame" && callbackType == "Click")
widget->addClickEventListener(CC_CALLBACK_1(MenuScene::singleGame,this));
//多人游戏按钮
if(callbackName == "mulGame" && callbackType == "Click")
widget->addClickEventListener(CC_CALLBACK_1(MenuScene::mulGame,this));
//音效操作按钮
if(callbackName == "operateMusic" && callbackType == "Click")
widget->addClickEventListener(CC_CALLBACK_1(MenuScene::operatorMusic,this));
//载入游戏按钮
if(callbackName == "loadGame" && callbackType == "Click")
widget->addClickEventListener(CC_CALLBACK_1(MenuScene::loadGame,this));
//退出游戏按钮
if(callbackName == "exitGame" && callbackType == "Click")
widget->addClickEventListener(CC_CALLBACK_1(MenuScene::gameExit,this));
}
在这里面就是判断当前所属的事件,然后进行绑定
还有一种就是直接绑定了,不获取回调函数名
auto loadGameBtn = dynamic_cast<Widget*>(csb->getChildByName("loadgame_btn"));
//也可以是addTouchEventListener()
loadGameBtn->addClickEventListener(CC_CALLBACK_1(MenuScene::loadGane,this));
两种方法,孰优孰劣,看情况
,最后上一张效果图
参考文档
http://www.cocoachina.com/cms/wap.php?action=article&id=11625