CCArray指针变为无效,并以某种方式再次变为有效

时间:2013-05-10 10:57:36

标签: c++ memory-management cocos2d-iphone cocos2d-x

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

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

0 个答案:

没有答案