C++ CCArray指针变为无效,并以某种方式再次变为有效
更新(已解决。更多信息在末尾)。 我正在使用C++ CCArray指针变为无效,并以某种方式再次变为有效,c++,memory-management,cocos2d-iphone,cocos2d-x,C++,Memory Management,Cocos2d Iphone,Cocos2d X,更新(已解决。更多信息在末尾)。 我正在使用CCArray存储CCSprite指针。首先,我调用highlightPoints(),在其中初始化并保留CCArray。然后,调用ontouchsmoved,其中spriteArr返回null并且不满足if条件。但是,稍后当我调用removePoints(),spriteArr会记住之前添加的所有ccsprite,我可以将它们从层中删除。我完全搞不懂为什么会这样 代码 void Structure::highlightPoints() { s
CCArray
存储CCSprite
指针。首先,我调用highlightPoints()
,在其中初始化并保留CCArray
。然后,调用ontouchsmoved
,其中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);
}
}
}
void结构::highlightPoints(){
spriteArr=CCArray::createWithCapacity(mScreenVertices.size());
spriteArr->retain();
对于(int index=0;index设置位置(ccp(mscreentvertices.at(index.GetX(),mscreentvertices.at(index.GetY()));
addChild(顶点);
spriteArr->addObject(顶点);
}
}
空洞结构::OnTouchMoved(cocos2d::CCPoint位置){
if(spriteArr){//false
对于(int index=0;indexcount();index++){
((CCNode*)spriteArr->objectAtIndex(index))->setPosition(ccp(mScreenVertices.at(index.GetX(),mScreenVertices.at(index.GetY()));
}
}
}
void结构::removePoints(){
if(spriteArr){
对于(int index=0;indexcount();index++){
removeChild((CCNode*)spriteArr->objectAtIndex(index),true;
}
}
}
已解决
我相信我使用派生类对象调用了
highlightPoints()
和removePoints()
,使用基类对象调用了onTouchesMoved()
。由于“切片”错误,派生类成员无法读取。可能是不同的结构对象?例如,在第一个对象中填充spriteArr,然后在另一个对象中接收OnTouchsMoved。在这两个对象的OntouchsMoved()
中,我得到的指针无效。您确定调用了该对象的OntouchsMoved吗?