简介
此模块是在 “自定义协程模块”之上,做的一个拓展。运用“链式结构”让事件事件得以按指定顺序调用。
自定义事件模块简单使用
代码如下:
using System;
using IFramework;
using IFramework.Moudles.Coroutine;
using IFramework.Moudles.NodeAction;
using UnityEngine;
public class TestEvent : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
// 初始化
Framework.Init();
//协程模块初始化
Framework.moudles.Coroutine = Framework.moudles.CreateMoudle<CoroutineMoudle>();
// 主要对象:序列节点(SequenceNode)、重做节点(RepeatNode)
// 操作:序列节点——重做 、 重做节点——序列
this.Sequence()
.Repeat((r) =>
{
r.Sequence((s) =>
{
s.TimeSpan(new TimeSpan(0, 0, 3), false) //间隔3秒
.Event(() => { Log.L("事件1"); }, false)
.TimeSpan(new TimeSpan(0,0,2),false) //间隔2秒
.Event(()=>{Debug.Log("事件2");},false)
.OnCompelete(() => { Log.L("完成"); }) //最终事件调用。
.Event(()=>{Debug.Log("事件3");},false);
}, false)
;
}, 2, false) //重做次数:2
.TimeSpan(new TimeSpan(0, 0, 3), false)
.OnCompelete((ss) => { /*ss.Reset();*/ })
.OnDispose((ss) => { Log.L("销毁"); })
.Run(Framework.moudles.Coroutine as CoroutineMoudle); //在协程模块运行
}
private void Update()
{
Framework.Update();
}
private void OnDestroy()
{
Framework.Dispose();
}
}
输出结果如下:
主要注意:
事件3 的输出顺序。
事件2的输出时间间隔
解析
- 主要类:SequenceNode、RepeatNode
- SequenceNode 包括如下操作:设置 时间间隔、设置事件(可多次)、设置完结事件、设置销毁事件、设置运行协程模块、重做(可设置重复次数)。
- RepeatNode 操作只有一个:获取 SequenceNode。
- 这些节点有一个共同的属性,是否自动dispose
其他节点无所谓,Repeat节点内部的节点一定不能让其自动回收,否则会产生空引用问题
只要在最外面的节点方法内调用dispose,内部的都会dispose
结尾
以上内容是 作者个人的理解,如有错误,欢迎指出。
顺便给出OnClick大佬自己 写的文档地址:009 自定义节点事件模块
如果对 IF框架有其他看法,也欢迎大家 进群交流。