animatron的动画库,当前的develop branch其实是不合适做研究的, 先切换到v1.5的branch:

git checkout tags/v1.5

在整理的时候,需要先有一个清晰的思路,即: 动画是由素材与素材的行为组成的。 在时间线上,素材在不同的时间点展现出不同的变换,最终呈现出动画的效果。

时间线的移动

render/r_loop中,不断请求下一次渲染继续调用render/r_loop。 在每次迭代中,通过render/r_at来实现更新内容。 最终,通过anim.render这个函数来实现整个anim的重绘。

时间tick中,动作的管理

anim/render其实是委托给了element/render,因为anim其实主要是由element组成的。 而在element/render的render过程中,最重要的是element/modifiers, 这个抽象概念,是一次渲染过程中的改变器。 分为C.MOD_SYSTEM, C.MOD_TWEEN, C.MOD_USER, C.MOD_EVENT这么多不同的种类。 其中,Tween是所有基本动作的改变发生的地方。 而Event是所有事件触发的方式。

Tween的生产

所有的Tween都是从Importer中产生的,在import的过程中, 根据Tween/register注册的不同函数。

Immutable的展望

从Immutable的角度来看动画的话, 可以简单的理解为 state[time] = f(initialState, time) 的数组。 同时,由于这种迭代的模式,其实可以通过dp的方式,减少数据结构的浪费。