ActionNode(节点模块)
附上IFramework 下载地址:IFramewrok
IFramework QQ交流群:782290296
节点模块,该模块提供一些节点,比如说顺序节点,循环节点等等,等我们指定的函数可以去周期性的执行或者是按顺序执行,反正就是按照一定的逻辑去执行。这就是节点模块。
该模块的核心类其实就一个,就是ActionNode。但是我们不先讲这个,还是从使用入手,该模块向外提供的api在ActionNodeExtension类当中,这是一个静态类,里面封装了一系列的静态扩展函数,跟之前的Tween模块类似。
该类中有一个入口的api。
就是这个Run方法。我们可以理解为这是一个提供获取具体节点对象的方法。比如说你要获取一个顺序节点对象或者是循环节点对象,就传递对应的类型,那么他会先new一个NodeIterator的对象,那么NodeIterator是什么呢,我们简单看一下。
他的Config方法就是将该节点缓存起来,并将自身的movenext函数加进全局的update也就是更新函数当中,而自身的movenext又去调用节点的movenext函数,所以我们节点的movenext函数则会一直去调用,直到返回false。
继续回倒上面的Run方法,获取一个具体的节点对象后返回。可是我们都还没传递方法,怎么就返回了。我们往下面看,会看到有几个静态扩展。
方法太多了,我们看几个当例子,我们会看到,这个静态扩展,适用于我们的节点类对象的,可以看到旁边的泛型约束,所以我们返回的节点类可以直接去点出这些方法,这样也就实现了链式编程。然后我们看到函数具体做什么,函数将传进来的委托,赋值给了我们节点类的OnBegin,OnCompelete,然后再返回出去,这个返回操作就是为了实现链式编程。那么我们进去节点类看。
这个ActinoNode是所有节点类的基类。我们可以看到刚才赋值的三个属性了,这分别是三个委托,我们继续往下看。
movenext方法,代码很简单,当begin(开始调用)委托未调用则调用一下,然后调用onMovenext(每帧调用),当节点逻辑完成了,执行onCompelete方法(当结束调用)。但是我们会发现,这里好像不管是begin还是oncompelete都有两个。一个首字母大写一个小写,其实我们刚才从外部的静态扩展赋值的是首字母小写的。也就是一个委托事件。而大写的在这里。
这三个是由子类去重写的。这三个是让子类去实现,顺序,或者循环,就是去编写按照一定的规则去调用我们传进来的函数的。而上面由外部传递进来的三个方法则是用户具体的业务需求。仔细想想应该不难理解。然后我们再来去看下具体的节点类。
我们就看一个吧,其他都是大同小异,只是逻辑不同。
看到这个,条件节点。我们只要看OnMoveNext方法就可以了,调用传进来的委托方法,这个委托方法,是我们传递进来的判断条件,这个委托要返回一个bool值,而这个返回的值,在我们的ActionNode当中的MoveNext就有调用。
当子类中的OnMoveNext方法返回false,则节点结束。其实核心在于ActionNode,整个并不是很难理解。希望对大家有所帮助。
感兴趣的小伙伴希望可以支持下IFramework,顺便给个小星星:IFramewrok