1

更新(已解决。最后有更多信息。)

我正在使用 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()使用基类对象。由于“切片”错误,派生类成员不可读。

4

0 回答 0