1

更新 (解決済み。詳細は最後に。)

ポインターCCArrayを格納するためにa を使用しています。CCSprite最初にhighlightPoints()CCArrayが初期化されて保持されているものを呼び出しています。次に、がnull を返し、条件を満たさない場合にonTouchesMovedが呼び出されます。しかし、後で を呼び出すと、以前に追加されたすべての CCSprite が記憶されているため、それらをレイヤーから削除できます。なぜこれが起こっているのか、私は完全に混乱していますか?spriteArrifremovePoints()spriteArr

コード

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