使用vector中报出这样的错误,网上查说是迭代器删除的问题,一直没找到原因,后来终于想明白了。做个笔记,希望给遇到同样问题的读者留个参考。
1.出问题代码是这个样子的
for (auto iter = MouseListeners.v.begin(); iter != MouseListeners.v.end();++ iter)
{
(*iter)->handleMouseCallBack(event->getPosition());
}
2.错略一看没什么问题,其实在回调函数中出了问题,因为只写了一个监听器,所以很明显找到下面代码
Rect r1= Rect(Vec2(490,120),300,100);
if(r1.containPoint(pos))
{
listening=false;
btn1->setColor(BLACK);
//EventDispatch::getInstance()->MouseListeners_Clear();
Director::getInstance()->pushScene(DemoScene1::createScene());
return;
}
代码如果看起来似曾相识,那就是对的,笔者最近在参照cocos2d-x写一个游戏引擎。
3.其中Director::getInstance()->pushScene(DemoScene1::createScene())这部分在内部不明显的又一次调用了出问题的部分,继续看
bool DemoScene1::init()
{
//初始化父级init
if ( !Layer::init() )
{
return false;
}
autoCreatpopSprite();
auto listener=MouseListener::create((MouseCallBack)&DemoScene1::handleMouse1,this);
EventDispatch::getInstance()->addListener(listener);
return true;
}