人物与障碍物碰撞之后,想执行一个障碍物被撞碎的动画,但有问题,动画会多次执行导致崩溃。
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让其隐藏然后判断未隐藏之前执行动画,但还是至少会执行两遍动画代码导致崩溃