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。
当我创建一个按钮列表并为其添加 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。