插件系统
Rinne 的核心极其精简,只负责纯数值的 SoA 计算。通过插件系统,Rinne 可以处理复杂的 DOM 属性、颜色转换和向量数组。
Rinne 在初始化时会自动注册以下常用插件:
- DOM 插件:处理 CSS 属性、Transform 合并及单位转换。
- 颜色插件:处理 Hex, RGB, RGBA 颜色插值。
- 向量插件:处理数组(Array)类型的属性(如 Three.js 的 position)。
如果你需要使用自定义插件,或者在某些特殊环境下需要手动管理插件,可以使用 registerPlugin 方法。
import { rinne } from '@shxnovel/rinne';import { MyCustomPlugin } from './MyCustomPlugin';
// 手动注册插件rinne.registerPlugin(MyCustomPlugin);注意:Rinne 默认已经注册了内置插件。如果你调用了
rinne.purge(),引擎会重置状态并自动重新加载这些默认插件。
开发自定义插件
Section titled “开发自定义插件”一个 Rinne 插件是一个实现了 RinnePlugin 接口的对象。你可以根据需要开发自己的插件来支持 PixiJS, Babylon.js 等第三方库。
插件接口定义
Section titled “插件接口定义”export interface RinnePlugin { name: string; // 测试当前属性是否该由本插件处理。返回 true 表示本插件感兴趣。 test: (target: any, key: string, value: any) => boolean; // 处理逻辑。返回 true 表示接管该属性,引擎将不再尝试其他插件或默认逻辑。 onTo: ( engine: Rinne | RinneTimeline, core: RinneCore, target: any, key: string, value: any, config: RinneTweenConfig, isAdditive: boolean ) => boolean;}示例:一个简单的 Log 插件
Section titled “示例:一个简单的 Log 插件”const MyLogPlugin = { name: 'LogPlugin', test: (target, key) => key === 'debug', onTo: (engine, core, target, key, value) => { console.log(`Animating ${key} to ${value}`); return false; // 仅做记录,不拦截后续逻辑 }};
rinne.registerPlugin(MyLogPlugin);