addTouchEventListener的参数是什么

时间:2015-07-28 08:50:26

标签: c++ cocos2d-x

我为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 *'

1 个答案:

答案 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文档 还有onTouchBeganonTouchEnded here的示例。 您可以使用listener1

代替此示例中的myButton