cocos2d-x 精灵多个动作互斥执行

实现一个精灵的两个动作互斥

  • 实现背景:当前一个精灵有两个动作,一个动作X,一个动作Y,要求其中一个动作播放动画时候,再次点击当前按钮或者点击另一个动作按钮无效

  • 解决方案:现X、Y动作互斥,设置一个判定变量acting,当其为false的时候,X、Y动作都可以执行,当某个动作正在进行中,acting将被设为true,表示正在执行X或Y动作,此时点击按钮X、Y无效,必须等待当前动画结束后acting被设置为false以后,二者才重新生效。

  • 实现代码:

    • 在相对应的类中添加一个新的成员acting

      bool acting;
    • acting在初始化函数时初始值为false

    • 按钮X回调函数

      void HelloWorld::Xfun(cocos2d::Ref * pSpender)
      {
          if (!acting) {
              //使得其他动作回调函数不能进入播放动画
              acting = true;
      
              //X动作时候的动画
              Animate* deadAnimate = Animate::create(AnimationCache::getInstance()->getAnimation("deadAnimation"));
      
              auto set = CallFunc::create(([this]() {
                  log("x");
                  acting = false;
              }));
      
              //当播放完动画以后才设置acting的值
              Sequence* deadSeq = Sequence::create(deadAnimate, set, NULL);
              player->runAction(deadSeq);
      
          }
      }
    • 按钮Y回调函数

      void HelloWorld::Yfun(cocos2d::Ref * pSpender)
      {
          if (!acting) {
              //使得其他动作回调函数不能进入播放动画
              acting = true;
      
              //Y动作时候的动画
              Animate* attackAnimate = Animate::create(AnimationCache::getInstance()->getAnimation("attackAnimation"));
              auto set = CallFunc::create(([this]() {
                  log("y");
                  acting = false;
              }));
      
              //当播放完动画以后才设置acting的值
              Sequence* attackSeq = Sequence::create(attackAnimate, set, NULL);
              player->runAction(attackSeq);
          }
      }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值