我为uiButton创建了类,有以下三个函数; 我在课堂上创建了按钮类有3个功能如下;
void MyButtonClass::Create(const std::string &buttonImage, cocos2d::Layer *layer)
{
myButton = ui::Button::create(buttonImage, buttonImage);
layer->addChild(myButton, 100);
}
void MyButtonClass::SetPosition(float xPosition, float yPosition)
{
myButton->cocos2d::Node::setPosition(xPosition, yPosition);
}
void MyButtonClass::SetTouchListener(Ref *sender, SEL_TouchEvent *selector)//There is problem
{
myButton->addTouchEventListener(sender, selector);
}
如何设置TouchListener?我查看了库中的参数,但它无法正常工作。
例如,从我的gamescene创建按钮;
button.Create("Play.png", this);
button.SetPosition(100, 200);
button.SetTouchListener(CC_CALLBACK_1(GameScene::Play, this));//Exception: No viable conversion from '__bind<void (GameScene::*)(cocos2d::Ref *), GameScene *, std::__1::placeholders::__ph<1> &>' to 'cocos2d::Ref *'
答案 0 :(得分:1)
我认为你在你的情况下使用了错误的重载。您将要使用void addTouchEventListener (const ccWidgetTouchCallback &callback)
重载。
这不起作用的原因是因为没有回调绑定到myButton
。您需要绑定自定义回调:
假设您的按钮类继承自::cocos2d::ui::Button
或::cocos2d::ui::Widget
,则需要指定一个回调函数
Widget::addTouchEventListener()方法。
myButton->addTouchEventListener(this, toucheventselector(MyButtonClass::touchEvent));
当收到按钮的touchevent时,将调用回调MyButtonClass::touchEvent
。
例如:
void MyButtonClass::SetTouchListener(Ref *sender, SEL_TouchEvent *selector)//There is problem
{
myButton->addTouchEventListener([](Ref*, Widget::TouchEventType){
// Simple callback for touch
int n = 0;
});
}
修改强>
另一种方法是通过设置以下一项或多项来使用myButton
中的方法:
onTouchBegan (Touch *touch, Event *unusedEvent)
onTouchMoved (Touch *touch, Event *unusedEvent)
onTouchEnded (Touch *touch, Event *unusedEvent)
onTouchCancelled (Touch *touch, Event *unusedEvent)
查看ui::Button class的codos2d-x文档
还有onTouchBegan
和onTouchEnded
here的示例。
您可以使用listener1
。
myButton