HumanBreak/docs/api/motajs-render-vue/functions.md

150 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# use.ts API 文档
本文档由 `DeepSeek R1` 模型生成并微调。
---
## 函数说明
### `onTick`
```typescript
function onTick(fn: (time: number) => void): void;
```
**功能**:注册每帧执行的回调(自动管理生命周期)
**推荐使用场景**:替代 `ticker`
**参数说明**
- `fn`: 接收当前时间戳的帧回调函数
**示例**
```typescript
// Vue 组件中
onTick(time => {
console.log('当前帧时间:', time);
});
```
---
### `useAnimation`
```typescript
function useAnimation(): [Animation];
```
**功能**:创建动画实例(自动销毁资源)
**返回值**:包含动画实例的元组
**推荐使用场景**:替代直接 `new Animation()`
**示例**
```typescript
const [anim] = useAnimation();
anim.time(1000).move(100, 200);
```
---
### `useTransition`
```typescript
function useTransition(): [Transition];
```
**功能**:创建渐变实例(自动销毁资源)
**返回值**:包含渐变实例的元组
**推荐使用场景**:替代直接 `new Transition()`
**示例**
```typescript
const [transition] = useTransition();
transition.value.x = 10;
transition.time(500);
transition.value.x = 100;
```
---
### `useKey`
```typescript
function useKey(noScope?: boolean): [Hotkey, symbol];
```
**功能**:管理按键作用域(自动注销绑定)
**参数说明**
- `noScope`: 是否使用全局作用域(默认创建新作用域)
**返回值**:元组 [热键实例, 作用域标识]
**推荐使用场景**:替代直接操作全局热键实例
**示例**
```typescript
const [hotkey, scope] = useKey();
hotkey.realize('mykey_id', () => console.log('mykey_id emitted.'));
```
---
### `onEvent`
```typescript
function onEvent<
T extends ERenderItemEvent,
K extends EventEmitter.EventNames<T>
>(
item: RenderItem<T>,
key: K,
listener: EventEmitter.EventListener<T, K>
): void;
```
**功能**:自动管理事件监听生命周期
**推荐使用场景**:替代直接 `item.on()` + 手动注销
**示例**
```typescript
onEvent(sprite, 'click', event => {
console.log('元素被点击', event);
});
```
---
## 总使用示例
```tsx
import { defineComponent } from 'vue';
import { useAnimation, onTick, useKey } from '@motajs/render-vue';
export const MyComponent = defineComponent(() => {
// 动画控制
const [anim] = useAnimation();
anim.time(1000).rotate(Math.PI);
// 帧循环
onTick(time => {
console.log('当前游戏运行时间:', time);
});
// 按键控制
const [hotkey, scope] = useKey();
hotkey.realize('mykey_id', () => console.log('mykey_id emitted.'));
return () => <sprite />;
});
```
---
## 注意事项
1. **资源管理**:所有通过这些接口创建的资源(动画/渐变/事件)都会在组件卸载时自动销毁
2. **内存安全**:使用原生接口可能导致内存泄漏,这些封装接口确保:
- 自动注销事件监听
- 自动停止动画/渐变
- 自动清理按键绑定
3. **类型安全**:所有接口均包含完整的类型推断(如 `onEvent` 的事件类型检查)
4. **框架适配**:专为 Vue3 组合式 API 设计,不可用于其他框架环境