Setvisible(false)报错了,求指导。

想把几个精灵先隐藏起来然后在特定场合下显示出来
初始化的时候设置为不可见的
然后再次显示出来的时候没问题
但是再次隐藏起来的时候就出问题了

//显示
for (int i = 0; i < m_player->boom; i++)
{
Sprite* sp=(Sprite*)this->getChildByTag(5+i);
sp->setVisible(true);
}
for (int i = 0; i < m_player->hp; i++)
{
Sprite* sp=(Sprite*)this->getChildByTag(10+i);
sp->setVisible(true);
}
//隐藏
for (int i = 5; i > m_player->boom; i–)
{
Sprite* sp=(Sprite*)this->getChildByTag(5+i);
sp->setVisible(false);
}

for (int i = 5; i > m_player->hp; i--)
{
    Sprite* sp=(Sprite*)this->getChildByTag(10+i);
    sp->setVisible(false);
}

是不能这么用吗?
新人求指点

:7::7::7::7::3::3::3:

经验之谈:

1,由于boom、hp在显示隐藏期间有了变化,导致getChildByTag()不正确拿到了空指针。

2,其实我感觉就是1了。

//炸弹个数最大5个
for (int i = 0; i < 5; i++)
{
Sprite* sp=Sprite::create(PLANE,Rect(1,1,63,57));
//sp->runAction(Hide::create());
sp->setVisible(false);
sp->setPosition(sp->getContentSize().width/2+5i+sp->getContentSize().widthi,5+sp->getContentSize().height/2);
sp->setTag(5+i);
this->addChild(sp);
}
//hp最大5个
for (int i = 0; i < 5; i++)
{
Sprite* sp=Sprite::create(PLANE,Rect(896,355,57,43));
sp->setVisible(false);
sp->setPosition(size.width-(sp->getContentSize().width/2+5i+sp->getContentSize().widthi),5+sp->getContentSize().height/2);
sp->setTag(10+i);
this->addChild(sp);
}

那几个精灵一直都在那,没人懂他们啊,boom和hp只是用来控制他们显示隐藏的数量的,不会出现空指针吧