更新(已解决。最后有更多信息。)
我正在使用 aCCArray
来存储CCSprite
指针。首先,我调用highlightPoints()
的CCArray
是初始化并保留的。然后,onTouchesMoved
调用其中spriteArr
返回 null 且不满足if
条件。但是,稍后当我调用 时removePoints()
,spriteArr
会记住之前添加的所有 CCSprite,我可以将它们从图层中删除。我完全困惑为什么会这样?
代码
void Structure::highlightPoints() {
spriteArr = CCArray::createWithCapacity(mScreenVertices.size());
spriteArr->retain();
for( int index = 0; index < mScreenVertices.size(); index++) {
CCSprite *vertex = CCSprite::create("reticle.png");
vertex->setPosition(ccp(mScreenVertices.at(index).GetX(), mScreenVertices.at(index).GetY()));
addChild(vertex);
spriteArr->addObject(vertex);
}
}
void Structure::onTouchesMoved(cocos2d::CCPoint position) {
if(spriteArr) {//false
for( int index = 0; index < spriteArr->count(); index++) {
((CCNode*)spriteArr->objectAtIndex(index))->setPosition(ccp(mScreenVertices.at(index).GetX(), mScreenVertices.at(index).GetY()));
}
}
}
void Structure::removePoints() {
if(spriteArr) {
for( int index = 0; index < spriteArr->count(); index++) {
removeChild((CCNode*)spriteArr->objectAtIndex(index), true);
}
}
}
解决了
我相信我正在调用highlightPoints()
和removePoints()
使用派生类对象并onTouchesMoved()
使用基类对象。由于“切片”错误,派生类成员不可读。