2014-12-06 30 views
1

我在Cocos2d X遊戲中使用此方法。lambda函數中的變量顯示垃圾值

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中像上面,我從lambda函數內部日誌不同的值。例如,我從頂部2個日誌和最底部的日誌中獲得「OpponentNode :: discard < 402>」,但從lambda函數內部的日誌中獲得「OpponentNode :: discard < 64>」。

其他景點:

  1. 拉姆達塊最後執行。
  2. 我通常會得到像64這樣的值或垃圾值,如-15493456。

我的猜測是整數cardNum在執行前取消分配。任何人都可以指向正確的方向嗎?

+1

您正在捕獲對'cardNum'參數的引用。我認爲你想通過價值來捕捉那一個。 – 2014-12-06 11:15:50

+0

所以我應該使用類似[cardNum,&delegate,&discardedCard]()? @AlanStokes – user3164248 2014-12-06 11:44:41

+0

[&,cardNum]()怎麼樣? @AlanStokes – user3164248 2014-12-06 11:52:47

回答

2

您正在捕獲對cardNum參數的引用。我認爲你想通過價值來捕捉那一個。我不清楚delegate是什麼。假設它是班級成員,那麼我認爲你只需要[this, discardedCard, cardNum]。你可以縮寫爲[=],雖然我認爲明確的更清晰。