Cocos2D中Action的进阶使用技巧(二)

简介:

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;)


上回说到解决办法是使用CCTargetedAction类.

CCTargetedAction是一个很神奇的类,它本身没有什么动作效果,但是它可以把一个动作和一个特定目标绑定起来,并且返回一个新的Action,我们就可以按需要操作这个新的动作了.

不过该类在Cocos2d-x中和Cocos2d-2.x中才存在,而本猫使用的Cocos2d的版本为最新的3.4.9.而在cocos2d 的v3版本中,CCTargetedAction类是不存在的.

不过好消息是,2.x版本中的对应类是可以在3.x中使用的,我们只需要将原来的代码拷贝到3.x中就可以了.

但是光拷贝是不行的,据说会将一个动作执行2遍,这时我们必须手动再加一条代码:

-(BOOL)isDone{
    return [_action isDone];
}

即在具体类中写一个完成方法的重载即可.

好了,在Cocos2d v3.4.9中的准备工作都已完成,下面是实现代码:

NSMutableArray *actions = [NSMutableArray array];

    for (BattleUnitRoot *unit in sortBattleUnits) {
        BattleUnitRoot *target = _attackTargets[unit.playerData.battleIndex];

        CCTargetedAction *atkAction = [CCTargetedAction actionWithTarget:unit.sprite action:
                                                (CCActionFiniteTime*)[unit getAttackAction]];
        CCTargetedAction *atkedAction = [CCTargetedAction actionWithTarget:target.sprite action:
                                                (CCActionFiniteTime*)[target getAttackedAction]];
        [actions addObject:atkAction];
        [actions addObject:atkedAction];
    }

    CCActionSequence *seq = [CCActionSequence actionWithArray:actions];
    [self runAction:seq];

编译运行,以下是实际游戏到效果动画:

这里写图片描述

相关文章
《Flutter in action》电子版地址
独家开放,免费下载!《Flutter in action》电子书重磅发布,Google Flutter 团队强烈推荐,闲鱼多年最佳实践经验整理成册,揭秘亿级流量背后的技术秘籍,为你精解Flutter企业级实践。
66 0
《Flutter in action》电子版地址
|
C++ Python
cocos2d-x lua-binding: 源码分析
cocos2d-x lua-binding: 源码分析
78 0
|
设计模式 安全 API
iOS Target-Action设计模式的运用
iOS Target-Action设计模式的运用
152 0
iOS Target-Action设计模式的运用
|
Android开发 容器
Flutter 107: 图解自定义 ACEPageMenu 滑动菜单 (二)
0 基础学习 Flutter,第一百零七篇,继续完善自定义 ACEPageMenu 第二节!
285 0
Flutter 107: 图解自定义 ACEPageMenu 滑动菜单 (二)
|
容器
Flutter 105: 图解自定义 ACEPageMenu 滑动菜单 (一)
0 基础学习 Flutter,第一百零五步:自定义从屏幕四周滑动 ACEPageMenu!
325 0
Flutter 105: 图解自定义 ACEPageMenu 滑动菜单 (一)
|
前端开发 Android开发
Flutter 33: 图解自定义 View 之 Paint
0 基础学习 Flutter,第三十三步:自定义 View 第一节~
2476 0
|
Dart API
Dart In Action -Dart快速入门(五)
写在前面 本文基本上是将dart官网部分内容进行翻译,没兴趣的请出门左转至Dart的官网,有兴趣的同志请继续阅读本文。Flutter教程在这里 Runes 在Dart中,Runes是字符串的UTF-32代码点。
1036 0
|
Dart
Dart In Action -Dart快速入门(三)
写在前面 本文基本上是将dart官网部分内容进行翻译,没兴趣的请出门左转至Dart的官网,有兴趣的同志请继续阅读本文。Flutter教程在这里 Final 和 const 如果您从不打算更改变量,请使用final或const,而不是var或类型。
923 0
|
存储 Dart Java
Dart In Action -Dart快速入门(二)
写在前面 本文基本上是将dart官网部分内容进行翻译,没兴趣的请出门左转至Dart的官网,有兴趣的同志请继续阅读本文。Flutter教程在这里 Dart的一些重要概念 当你学习Dart语言时,记住这些事实和概念: 每个变量都是一个对象,而每个对象都是类的实例。
1386 0
|
物联网 Dart 编译器
Dart In Action -Dart快速入门(-)
写在前面 本文基本上是将dart官网部分内容进行翻译,没兴趣的请出门左转至Dart的官网,有兴趣的同志请继续阅读本文。Flutter教程在这里 1.什么是Dart? 以下来自百度百科: Dart是谷歌开发的计算机编程语言,后来被Ecma (ECMA-408)认定为标准 [1] 。
1828 0