Cocos2dx中创建Button列表

Create a list of Button in Cocos2dx

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

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)。

什么错误?

在闭包中,您通过引用捕获变量 i,这就是为什么单击任何按钮都会打印相同的值,在本例中为 12。相反,如果您捕获变量 i 按值(通过将 [&] 替换为 [=])然后每个按钮将打印 0-12 范围内的不同值。

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