精灵使用Blink 执行完动作之后,消失不见了,原因是闪烁的过程中精灵刚好到空纹理(透明)的那部分,这时候用户通过某种操作中断闪烁动作,导致下个状态的时候,精灵依然停留在空纹理的状态。所以最好在精灵执行完闪烁动作之后,或者执行下个动作之前,让精灵setvisible(true)显示出来。
解决方式:
格式1
Blink * hurt = Blink::create(0.5, 5);
写一个回调函数,等到执行完Blink 动作后调用这个回调函数
CallFunc *call2 = CallFunc::create([this](){
this->setVisible(true);
});
this->runAction(Sequence::create(hurt,call2, NULL));
格式2
void Hero::afterHurt()//英雄闪烁之后有可能不见了,这里把它重新显示出来
{
this->setVisible(true);
}
//使用Blink之后必须等精灵执行完之后,强制设置精灵的可视值为true才能显示,否则有可能出现空白
Blink * hurt = Blink::create(0.5, 5);
FiniteTimeAction* action1 = CCSequence::create(hurt ,CallFunc::create(this , callfunc_selector(Hero::afterHurt)) , NULL);
this->runAction(action1);
格式3(最好用)
在执行动作前先写一句,把相应的精灵显现出来,这样就不会出现因为刚好闪烁到空的精灵纹理时因为用户强迫中断,导致下个操作的时候精灵纹理不显现,一直停留在空纹理的状态。
this->setVisible(true);