在Cocos2dx中创建Button列表

时间:2016-03-13 02:02:02

标签: cocos2d-x

当我创建一个按钮列表并为其添加addTouchEventListener时,如下面的代码

for (int i = 0; i < btmPlay.size(); i++  )
{
    btmPlay.at(i)->addTouchEventListener([&](Ref *sender, ui::Widget::TouchEventType type){
        if (type == ui::Widget::TouchEventType::ENDED)
        {
            CCLOG("%i", i);
        }
    });
}

当我触摸第一个按钮时,结果是12(btmPlay.size()= 13)。

有什么错误?

1 个答案:

答案 0 :(得分:0)

在你的闭包中,你通过引用捕获变量i,这就是为什么点击任何按钮将打印相同的值,在这种情况下为12.如果相反,你捕获变量{{1} }按值(通过用i替换[&]),然后每个按钮将打印0-12范围内的不同值。

顺便说一句,在你的例子中通过引用捕获[=]也是错误的,因为在调用闭包时,变量已经超出范围,并且打印它是UB。