Rinning same type of Animations for multi-times, only the first time it displays nothing, but other time it works correctly

I wrote a BattleDisplayEvent class, it could be to running an animation with the given sprite, and actually the sprite is always the same one, it is initialized as this:

_spriteForMoveAnim = Sprite::create();
_spriteForMoveAnim->setAnchorPoint(Vec2::ANCHOR_MIDDLE);
_spriteForMoveAnim->setPosition(0.0f, 0.0f);

And then, the animation and the action to run it is created like this:

auto moveAnim = Animation::createWithSpriteFrames(getFramesByFormat("%d.png", 3), 0.03f);
//target->pokemon()->_spriteForMoveAnim->runAction(Animate::create(moveAnim));
auto action = Animate::create(moveAnim);
action->retain();
Battle::getInstance()->_displayEvents.push_back(make_shared<BattleDisplayEvent>("Animation", target->pokemon()->_spriteForMoveAnim, action));

When I tried to run the action with the commented line directly, it runs well. But when I’m trying to run it with code in BattleDisplayEvent class, the first time it shows nothing, in the second time and times after that, the animation plays well.
Those code about BattleDisplayEvent:

void BattleDisplayEvent::onStart()
{
	if(_type=="Animation")
	{
		_animSprite->setVisible(true);
		_animSprite->runAction(_action);
	}
}

void BattleDisplayEvent::onStop()
{
	if (_type == "Animation")
	{
		_animSprite->setVisible(false);
		_action->release();
	}
}

void BattleDisplayEvent::update(float dt)
{
	if(!_started)
	{
		onStart();
		_started = true;
	}
	if (_type == "Animation")
	{
		auto test = _animSprite->getNumberOfRunningActions();
		if (_animSprite->getNumberOfRunningActions() == 0)
		{
			_isDone = true;
		}
	}
}

And code of main loop:

if (!Battle::getInstance()->_displayEvents.empty())
{
	Battle::getInstance()->_displayEvents.front()->update(dt);
	if (Battle::getInstance()->_displayEvents.front()->_isDone)
	{
		Battle::getInstance()->_displayEvents.front()->onStop();
		Battle::getInstance()->_displayEvents.pop_front();
	}		
}

Interesting. I’ve never tried checking type. Why are you doing this?

My BattleDisplayEvent class can represent a skill effect animation or increasing/decreasing animation of hp and exp or some dialog needs waiting for some time. You may ignore the type checking