凡人修真3D(6)背包
1.背包检测空位的时候要注意。直接上代码吧。
正确的做法:检测完之后,需要立刻附加到背包中,才能进行下一次检测。
for (SeqPlayerItemPtr::iterator iter = playerItems.begin();
iter != playerItems.end();
iter++)
{
if (toBag->haveSpace((*iter)->getTPlayerItem().itemCode, (*iter)->getTPlayerItem().itemAmount))
{
fromBag->deleteItem((*iter));
toBag->addItem((*iter));
CPlayerItemHelper::updatePlayerItem(EUpdateTypeUpdate, gateEntity, toBag, (*iter), playerItemUpdates, tLogItems, -1, updateCode, player, logDetail);
SeqPlayerItemPtr playerItemVec2;
CBagHelper::tidyBag(updateCode, gateEntity, player, toBag, playerItemVec2, playerItemUpdates, tLogItems);
CBagHelper::pushBagInfo(updateCode, gateEntity, toBag, playerItemVec2);
}
}
这不是唯一的写法。关键点是,在调用了haveSpace函数之后,需要添加了这个物品。如果在添加物品前,再次检测,就没有意义了。
例如:
for (SeqPlayerItemPtr::iterator iter = playerItems.begin();
iter != playerItems.end();
iter++)
{
if (haveSpace(getTPlayerItem().itemCode, getTPlayerItem().itemAmount))
{
//xxx
}
}
//xxx干其他东西
for (SeqPlayerItemPtr::iterator iter = playerItems.begin();
iter != playerItems.end();
iter++)
{
addItem((*iter));;
}像这样,会出错,因为物品还没加进去,但是可能位置应该被占用了。
碰到这种情况,应该累加起来。
for (itemAmountMapIt = itemAmountMap.begin();
<span style="white-space:pre"> </span>itemAmountMapIt != itemAmountMap.end();
<span style="white-space:pre"> </span>++itemAmountMapIt)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>itemCodeAndAmountMap[itemAmountMapIt->second.itemCode] += itemAmountMapIt->second.amount;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>if (!bag->haveSpaces(itemCodeAndAmountMap))
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>CErrorCodeManager::throwException("ErrorGate_BagSlotNotEnough");
<span style="white-space:pre"> </span>}
人生如戏,还是戏如人生?微信公众号:传说之路
csdn博客 http://blog.csdn.net/u012175089/article/list/2

浙公网安备 33010602011771号