按下释放按钮时停止当前动画

Posted

技术标签:

【中文标题】按下释放按钮时停止当前动画【英文标题】:Stop current animation when press release the button up 【发布时间】:2014-06-06 10:39:02 【问题描述】:

我正在使用 cocos2d-x 在 xcode 中创建游戏。我是 cocos2d-x 的新手。

我创建了两个按钮,使用CCControlButton 进行跳转和滑动。我为运行和滑动创建了动画,名称相同,名为 man。

对于我在 init() 中创建的运行和对于我在名为旋转的单独函数中创建的幻灯片。当我按下幻灯片按钮时,幻灯片动画正在运行,而当我释放时,运行动画正在运行。

当我按住滑动按钮时,滑动动画应该保持滑动,当我释放滑动按钮时,滑动动画应该停止并运行动画应该运行,但是当释放滑动按钮时,跳转按钮不起作用,因为我只给出了一个条件if(man->numberofrunningaction()==1) 它应该跳。

当我按下幻灯片时,动作的数量正在增加。请任何人帮助我找到解决方案。

我正在使用以下代码跳转、滑动动画和运行动画..

   void PlayScene::rotate()
   
  anim1=CCAnimation::create();
  anim1->addSpriteFrameWithFileName("11.png");
  anim1->addSpriteFrameWithFileName("11.png");
  anim1->addSpriteFrameWithFileName("11.png");
  anim1->setLoops(4);
  anim1->setDelayPerUnit(0.05f);
  man->runAction(CCAnimate::create(anim1));
  man->setPosition(ccp(winwsize/5.5,winhsize/2.2));
  CCRotateBy *rot=CCRotateBy::create(1, 0.000000001);
  man->runAction(rot); 
  

 init()
 man=CCSprite::create();
 man->retain();

 anim=CCAnimation::create();
 anim->retain();

 anim->addSpriteFrameWithFileName("1.png");
 anim->addSpriteFrameWithFileName("2.png");
 anim->addSpriteFrameWithFileName("3.png");
 anim->addSpriteFrameWithFileName("4.png");
 anim->addSpriteFrameWithFileName("5.png");
 anim->addSpriteFrameWithFileName("6.png");
 anim->addSpriteFrameWithFileName("7.png");
 anim->addSpriteFrameWithFileName("8.png");
 anim->addSpriteFrameWithFileName("9.png");
 anim->setLoops(-1);
 anim->setDelayPerUnit(0.05f);
 man->runAction(CCAnimate::create(anim));
 man->setPosition(ccp(winwsize/5.5,winhsize/2.2));
 this->addChild(man,1);

 creating button for jump & slide.

  CCControlButton *rotate = CCControlButton::create(CCScale9Sprite::create("jump1.png"));
 rotate->setAdjustBackgroundImage(false);
 rotate->setPosition( ccp(CCDirector::sharedDirector()->getWinSize().width - 70,70) );
 rotate>addTargetWithActionForControlEvents(this,cccontrol_selector
  (PlayScene::jumpfun),CCControlEventTouchDown);
 addChild(rotate, 3);

CCControlButton *jumpbutton=CCControlButton::create(CCScale9Sprite::create("slide2.png"));
jumpbutton->setAdjustBackgroundImage(false);
jumpbutton->setPosition( ccp(CCDirector::sharedDirector()->getWinSize().width - 250,70) );    

jumpbutton->addTargetWithActionForControlEvents(this,
cccontrol_selector(PlayScene::rotate),CCControlEventTouchDown);
jumpbutton->addTargetWithActionForControlEvents(this, cccontrol_selector
(PlayScene::buttonup),CCControlEventTouchUpInside);
     addChild(jumpbutton, 3);

 void PlayScene::buttonup()

anim1->setLoops(0);
 

【问题讨论】:

man->stopActionByTag(10); 在旋转功能中 ani=CCAnimate::create(anim1); ani->setTag(10); man->runAction(ani); 【参考方案1】:

使用 stopActionByTag() 设置标签以识别您的动画并停止动画。

例如

CCAnimate *an =   CCAnimate::create(animation);
an->setTag(10);
man->runAction(an);

停止动画 -

man->stopActionByTag(10);

为动画标签创建宏。

希望对您有所帮助。

【讨论】:

感谢您的回答,但无法设置标签。因为它没有显示在 CCAnimation 中命名的成员。 如果你一次只做一个动画而不是尝试使用 man->stopAllActions() 来停止精灵的所有动作并只运行你想要的动画,例如幻灯片动画或运行动画

以上是关于按下释放按钮时停止当前动画的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AVAudioPlayer 释放声音?

如何在按下并释放一次按钮时打开 LED,然后通过再次按下和释放将其关闭?

需要帮助在按下精灵节点按钮时为其提供动画

在 STM32F103 中按下释放按钮时,EXTI 线获得奇/偶中断计数

使 matplotlib 按钮小部件在按下时启动,而不是在释放时启动

按下按钮时停止动画