我给人物技能写了一个定时器,判断条件是:
1.如果它(技能)与发射位置(Sinitial_x)在x方向的距离超过300,就removeChild(skill),并停止定时器;
||2.如果它飞行到了屏幕边框位置,就removeChild(skill),并停止定时器;
||3.如果它与地图上的怪物碰撞,就removeChild(skill),并停止定时器;
源代码如下:
//人物技能飞行动画和击中判断
void forest::skill_schedule(float dt)
{
if (is_skill_flying)
{
if (PinitialRotationY == 180)
{
skill->setPositionX(skill->getPositionX() + 30);
}
else if (PinitialRotationY == 0 || PinitialRotationY == 360)
{
skill->setPositionX(skill->getPositionX() - 30);
}
}
log("skill = %d", skill);
log("skill_position_x = %f", skill->getPositionX());
if (abs(skill->getPositionX() - Sinitial_x) >= 300)
{
is_skill_flying = false;
removeChild(skill, true);
this->unschedule(schedule_selector(forestScene::skill_schedule));
}
else if (skill->getPositionX() <= 50 || skill->getPositionX() >= 1150)
{
removeChild(skill, true);
is_skill_flying = false;
this->unschedule(schedule_selector(forestScene::skill_schedule));
}
else
{
//Vector<ghost*> ghostToDelete;
Rect skillRect(skill->getPositionX(),skill->getPositionY(),skill->getContentSize().width,skill->getContentSize().height);
for (auto gh : ghostMonster)
{
Rect ghostRect(gh->getPositionX(),gh->getPositionY(),gh->getContentSize().width,gh->getContentSize().height);
if (ghostRect.intersectsRect(skillRect))
{
gh->ghostHP -= 20;
if (gh->ghostHP <= 0)
{
//ghostMonster.eraseObject(gh);
}
removeChild(skill, true);
is_skill_flying = false;
this->unschedule(schedule_selector(forestScene::skill_schedule));
}
}
}
}
但是调试的时候发现,一旦达到其中一个条件,进行removeChild操作的时候,就会跳出如下错误:

然后这个错误我查了一下说一般是因为使用了NULL指针,然后我把指针打印出来,如下:

然后我就想不通是为什么
,求解答