Marionette 动画系统 支持帧事件吗

Marionette 动画系统 支持帧事件吗

目前不支持

目前不支持,可通过状态机组件来实现

有没有具体的实例,状态机组件onMotionStateUpdate获取哪个数值可以对应到动画的帧

更新一下。

我们正在讨论如何把动画帧事件集成到动画图里。因为现在我们认为动画帧事件调用机制欠妥。现在实现帧事件的流程如下:

  1. 用户编辑动画剪辑,添加帧事件,为事件起个名字 funcName

  2. 运行时,动画系统找到动画组件所在的结点,然后遍历结点下的其它组件,再遍历它们的每个方法,直到找到这个叫 funcName 的方法,然后调用:

for (每个组件 of 动画组件所在结点) {
  for (每个方法 of 组件) {
    if (方法名 === funcName) {
      调用此方法
      break;
    }
  }
}

可以看到,在步骤 2 里,会经历两次循环。这样的查找不仅费时,而且查找过程很隐晦。

我们正在考虑是否应该做成真正的监听-派发机制,也就是引擎不再去找方法,而是派发一个事件,由使用方来处理这个事件。也就是步骤二换成:

// 用户代码
动画组件.onFrameEvent('用户定义的事件名', () => {
    // 处理事件
});

在步骤2判断组件是否是动画组件,如果是动画组件然后才进入循环当前组件的方法,所以并不费时

不是的,是遍历动画组件所在结点下面的每个组件。肯定不是动画组件,因为你无法在动画组件上加方法啊,你加的方法都是你自己组件上的方法

派发监听的方式不是很好吗