我无法从std::list
包含CCNode
对象中删除项目。尝试erase()
使用元素时,XCode 给我以下错误:
error: address doesn't contain a section that points to a section in a object file
.
或者这个错误:
EXC_BAD_ACCESS code=2
在汇编文件中。
有时它会在以下位置崩溃:
ccGLBindTexture2D( m_pobTexture->getName() );
给我一个 EXC_BAD_ACCESS。
每次我运行应用程序时,我都会遇到这些错误之一。
remove() 方法正确地从 CCLayer 中删除了 CCNode,它消失了,并且节点数减少了 1。问题是TestObject仍然留在testList列表中,吃掉内存,cpu,搞砸了游戏。
我写了一个测试用例来重现这个问题。这里是:
testList = *new list<TestObject>;
testList.push_back(*new TestObject());
addChild(&testList.back());
testList.back().spawn();
testList.back().remove();
std::list<TestObject>::iterator test = testList.begin();
while (test != testList.end())
{
if(test->isRemoved){
testList.erase(test++);
}
}
TestObject 类只是一个 CCNode,添加了以下remove()
和spawn()
方法:
TestObject::TestObject(){
sprite = *CCSprite::createWithTexture(MainScene::hostileship_tex);
}
void TestObject::spawn(){
CCSize size = sprite.getTexture()->getContentSize();
this->setContentSize(size);
this->addChild(&sprite);
}
void TestObject::remove(){
GameLayer::getInstance().removeChild(this, true);
}
stacktrace XCode 给我列出了一些 cocos2dx 的内部更新和渲染函数,让我不知道是什么导致了崩溃。