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