物理引擎碰撞检测之后执行动画的问题

人物与障碍物碰撞之后,想执行一个障碍物被撞碎的动画,但有问题,动画会多次执行导致崩溃。

void PlayScene::onEnter()
{
Layer::onEnter();
auto listenner = EventListenerPhysicsContact::create();
listenner->onContactBegin = =](PhysicsContact& contact){
auto spriteA = (Sprite*)contact.getShapeA()->getBody()->getNode();
auto spriteB = (Sprite*)contact.getShapeB()->getBody()->getNode();

//人物和障碍物相撞
if (spriteA && spriteB
&& spriteA->getTag() == TAG_ROCK
&& spriteB->getTag() == TAG_SPRITE)
{
rockCollision(spriteA);
}

if (spriteA->getTag() == TAG_COIN)
{
spriteA->setPositionX(-coinSize.width);
SimpleAudioEngine::getInstance()->playEffect(“pickup_coin.mp3”);
}

return false;
};

_eventDispatcher->addEventListenerWithSceneGraphPriority(listenner, this);
}

void PlayScene::rockCollision(Sprite* spriteA)
{
auto animation = AnimationCache::getInstance()->animationByName(CACHEROCK);
auto animate = Animate::create(animation);
spriteA->runAction(animate);
}

spriteA让其隐藏然后判断未隐藏之前执行动画,但还是至少会执行两遍动画代码导致崩溃

spriteA->runAction(animate)前加句spriteA->stopAllActions()试试

不行啊,如果用一个变量限制做判断,还是至少要执行两次,不做判断会执行N次,因为碰撞应该是存在多个接触面,所以会调用多次,
不知道有没有办法解决这个问题?