小玩意系列之简单的工作流

小玩意系列合集地址:
https://gitee.com/ruanwujing/green-pack-cocos

之前封装了一个拖拽组件后,突然想到一个额外的常用效果,拖拽失败时,经常会有一个反馈动作,比如item震动:
dragfailed
然后我想要将这个效果封装进拖拽组件时,我产生了一种很不舒服的感觉。
因为这个效果不是一个很固定的效果,对于同一个游戏,失败反馈可能是震动,可能是闪烁,也可能是一个特效。
我决定不将这个效果封装进去,而是通过外部代码控制修改的方式来实现。
这时就产生了一个问题,我需要在拖拽失败弹回效果之前先执行一个我自己定义好的效果,等这个效果的时间过后,再执行弹回动作。
这种有时间消耗的步骤,一向是比较难插入其它操作的。
最终,我决定封装一个简单的工作流

工作流和状态机的区别?

我的理解是,工作流是不需要外部事件驱动的,启动之后,它会自动从头节点一直运行到一个叶子节点。而状态机是可以一直停留在某个状态中,直到用户执行某些操作才跳出改状态。

使用方式

1创建一个工作流
2在update中update工作流
image
3为工作流创建赋值一个头节点(根据具体需求赋值OnStart OnUpdate OnEnd函数)
image
4从头结点开始,赋值搭建起一棵节点树
image
5启动工作流
image

分支节点跳转:
image
工作流节点结束时调用done,可以指定切换到某个分支子节点
默认时切换到节点数组中的0号。

拖拽组件整改使用工作流执行弹回效果后,这时加入一个失败时先震动的效果,只要往它的工作流头部插入一个自己定义的震动工作流节点:
image

1赞

顶顶,库拉牛逼

感觉是为了用上 “工作流” 这个概念而专门去设计的。个人认为不是很必要。 drag 的 backWorkFlow,用一个 tween 动画能实现,在此 tween 前追加抖动 tween 是简单的事情。如果再引入一个工作流概念,其实成本变高了。违背了简单原则。

对于封装拖拽组件来说,的确会提高复杂度,但是对于使用这个拖拽组件的开发者来说,插入自定义有时耗动作不需要很多代码。 如果不搞工作流,使用者需要去重改drag组件,这样并不是很舒服。 当然了,这个drag组件的例子不算很好,因为本身返回动作其实就那么一个,本就不复杂的东西,怎么整都行。

我也持有相同的看法