Я использую этот метод в игре Cocos2d X.Переменная внутри лямбда-функции показывает значение мусора
void OpponentNode::discard(int cardNum)
{
log("\nOpponentNode::discard <%d>\n", cardNum);
for (int i = 0; i < vecOpponentHand.size(); i++)
{
if (vecOpponentHand.at(i) == cardNum)
{
vecOpponentHand.erase(vecOpponentHand.begin() + i);
break;
}
}
CardSprite * discardedCard;
for (int i = 0; i < vecOpponentCards.size(); i++)
{
if (vecOpponentCards.at(i)->getTag() == cardNum)
{
discardedCard = vecOpponentCards.at(i);
vecOpponentCards.erase(vecOpponentCards.begin() + i);
break;
}
}
log("\nOpponentNode::discard <%d>\n", cardNum);
discardedCard->makeFaceUp();
RotateTo * rotate = RotateTo::create(0.4 * SPEED_MULTIPLIER, 0);
MoveTo * move = MoveTo::create(0.4 * SPEED_MULTIPLIER,
origin + Vec2(visibleSize.width * 0.75, visibleSize.height * 0.6));
Spawn * spawn = Spawn::create(rotate, move, NULL);
CallFunc * callFunc = CallFunc::create(
[&]()
{
log("\nOpponentNode::discard <%d>\n", cardNum); //this one shows garbage/different value
if (delegate)
{
delegate->opponentNodeDidFinishDiscard(this, cardNum);
}
this->removeChild(discardedCard);
});
discardedCard->runAction(Sequence::create(spawn, callFunc, NULL));
log("\nOpponentNode::discard <%d>\n", cardNum);
}
Как ни странно, при входе целочисленного cardNum как выше, я получаю другое значение из журнала внутри лямбда-функции. Например, я получаю «OpponentNode :: discard < 402>» из двух верхних журналов и самого нижнего регистра, но получаю «OpponentNode :: discard < 64>» из журнала внутри функции лямбда.
Другие:
- Блок лямбда выполнен последним.
- В основном я получаю значения, такие как 64 или значения для мусора, такие как -15493456.
Моя догадка - это целочисленная карта. Начинается освобождение до исполнения. Может ли кто-нибудь указать мне правильное направление?
Вы записываете ссылку на параметр 'cardNum'. Я бы подумал, что вы хотите захватить это по стоимости. –
Итак, я должен использовать что-то вроде [cardNum, & delegate, and discardedCard]()? @AlanStokes – user3164248
Как насчет [&, cardNum]()? @AlanStokes – user3164248