队列处理技能的播放

   学完栈和队列虽然实现过自定义的队列和栈,可是还是容易忘记,我总觉得多使用才能有深刻的记忆。

     今天做的这道题目。

题目

三连击? 于是我开始尝试做...

设想1:是这样的 定义一个状态的枚举(释放技能的时候判断当前的状态 和是否正在播放技能动画)

用户点击攻击后 ->  开启协成(攻击)->根据技能的名字播放对饮的动画 -> 等待动画播放完成。

public enum AttackState// 攻击的状态

{ normal, attack1,attack2,attack3}

然后在update中判断用户的点击然后根据当前的状态来改变运行对应的协程(因为要等待技能播放的时间完成才能播放下一个)

状态的控制切换
动画播放的协同程序

可是做完后发现每次攻击要等待动画播放完成才能进行下一次攻击,用户体验很不好啊,我如果想要用户连续点击三下(然后一个一个自动播放技能呢),这个时候我想到了队列,队列先进先出嘛。

设想2:还是定义当前状态的枚举,

用户点击攻击后 ->  队列里添加下一个状态的枚举(比如当前状态是闲置状态下一个状态就是攻击1) ->根据队列里是否有要播放的技能来播放技能 ->技能的名字播放对饮的动画 -> 等待动画播放完成。

将下一个状态入队列


在队列里依次处理播放对应动画的协成


播放技能动画的协同程序

这里注意当要播放的动画名字是第三个动画的时候,就让他的状态转换成正常状态、技能进入Cd状态(用户不能点击三次后,要等待cd时间冷却好才能再次使用技能)


Inspector面板上填好对应的参数(对应技能的动画名字、动画的长度也就是时间)

这里因为动画的速度比较慢我想让他变的快一点(默认是1),这样效果比较好一点。速度修改了对应的动画长度也要除以这个速度。

然后做点UI可以看出效果。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容