更新(已解决。最后更多信息。)
我使用CCArray
来存储CCSprite
指针。首先,我打电话highlightPoints()
,其中CCArray
已初始化并保留。然后,调用onTouchesMoved
,其中spriteArr
返回null并且不满足if
条件。但是,稍后当我调用removePoints()
时,spriteArr
会记住之前添加的所有CCSprit,并且我可以从图层中删除它们。我完全不知道为什么会这样?
CODE
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()
,使用Base类对象调用onTouchesMoved()
。由于“切片”错误,派生类成员不可读。