这样用为什么会报错 求解

打杠的地方有问题

void HelloWorld::onTouchEndedMain(Touch* touch, Event* event){

auto point = (Vec2)touch->getLocation();
auto arrayBlock = HelloWorld::getarrayBlock();

//添加批处理精灵

auto batBlock = SpriteBatchNode::create("block.png");
batBlock->setPosition(Vec2(0,0));
this->addChild(batBlock);
auto blockyello = Sprite::createWithTexture(batBlock->getTexture(), CCRectMake(0, 0, BLOCK_W, BLOCK_H));

for (int i = 0; i < arrayBlock->count(); i++){

    auto block = (Sprite*)(arrayBlock->getObjectAtIndex(i));

    if (block->isVisible()){
        if (block->getBoundingBox().containsPoint(point)){

    //        blockyello->setPosition(block->getPosition());
    //        batBlock->addChild(blockyello);
    //        block->setVisible(false);
        }
        else{
            continue;
        }

    }
    continue;
}

}

重复addchild(blockyello)多次了

追加一个问题::5::5::5::5:

放到加杠的地方就对了,为什么呢? 结论是不同时间创建相同名字的精灵是不同的吗?

void HelloWorld::onTouchEndedMain(Touch* touch, Event* event){

auto point = (Vec2)touch->getLocation();
auto arrayBlock = HelloWorld::getarrayBlock();

//添加批处理精灵

auto batBlock = SpriteBatchNode::create("block.png");
batBlock->setPosition(Vec2(0,0));
this->addChild(batBlock);


for (int i = 0; i < arrayBlock->count(); i++){

    auto block = (Sprite*)(arrayBlock->getObjectAtIndex(i));

    if (block->isVisible()){
        if (block->getBoundingBox().containsPoint(point)){

// auto blockyello = Sprite::createWithTexture(batBlock->getTexture(), CCRectMake(0, 0, BLOCK_W, BLOCK_H));
blockyello->setPosition(block->getPosition());
batBlock->addChild(blockyello);

            //将方块放入数组中
            HelloWorld::getarrayBlock()->addObject(blockyello);


            block->setVisible(false);
        }
        else{
            continue;
        }

    }
    continue;
}

}

因为重新创建了一个新的对象的,在addchild的时候,每次添加的都是不同的对象,所以是可以的,在循环外部创建,里面addchild的时候,添加的都是同一个对象,所以会报错

3q,:14::14: