我在我的cocos2d-x c ++游戏中添加了硬币系统。我有个问题。 我想在他们离开视线时自动释放硬币组。我的意思是,如果一个硬币组滑过场景并离开现场,我想要将其摧毁。怎么做?
像这样:
for (auto gr : coinGroups) {
gr->setPositionX(gr->getPositionX() - scrollSpeed);
if(gr->getBoundingBox().getMaxX() < origin.x) {
this->removeChild(gr);
coinGroups.erase(coinGroups.begin());
}
}
coinGroups是
std::vector<CoinGroup*>
但是这给了我错误(“矢量迭代器不可增量”bla bla bla)。
如何解决此错误?感谢。
答案 0 :(得分:2)
您无法从遍历的容器中删除元素,因为这会导致未定义的行为。 注意循环使用内部迭代器。
以下代码只是为了更好地理解这个问题,但您必须做类似的事情:
std::vector<CoinGroup*> tempCoins;
tempCoins.swap( coinGroups );
for (auto gr : tempCoins)
{
.....
if(gr->getBoundingBox().getMaxX() < origin.x)
this->removeChild(gr);
else
coinGroups.push_back(gr)
}
c ++中的常见解决方案是使用std::remove_if
:
#include <algorithm> // std::remove_if
auto endIt = std::remove_if( coinGroups.begin(), coinGroups.end(), [&](CoinGroup *gr) -> bool
{
gr->setPositionX(gr->getPositionX() - scrollSpeed);
if (gr->getBoundingBox().getMaxX() < origin.x)
{
this->removeChild(gr);
return true;
}
return false;
} );
coinGroups.erase(endIt, coinGroups.end());