|
2 | 2 |
|
3 | 3 | 第一步,语句调用器 `runScript.ts` 根据语句类型执行一个语句,语句会返回一个IPerform对象,并将当前语句的演出写入到场景状态。 |
4 | 4 |
|
5 | | -第二步,语句调用器 `runScript.ts` 会设定一个自动的计时器,用于结束并卸载对象。 |
6 | | - |
7 | 5 | ```typescript |
| 6 | +/** |
| 7 | + * 描述演出的接口,主要用于控制演出,而不是执行(在演出开始时被调用演出的执行器返回) |
| 8 | + * @interface IPerform |
| 9 | + */ |
8 | 10 | export interface IPerform { |
9 | | - performName: string,// 演出名称,用于在后面手动清除演出,如果没有标识,则代表不是保持演出,给予一个随机字符串 |
10 | | - duration: number, // 持续时间,单位为ms,持续时间到后强制设置该演出为“已经结束”状态 |
11 | | - isOver: boolean, //演出是否已经结束 |
12 | | - isHoldOn: boolean, //演出是不是一个保持类型的演出 |
13 | | - stopFunction: Function, // 卸载演出的函数,这个函数不一定要真的卸载演出,只是在演出结束时会默认调用。 |
14 | | - blockingNext: Function // 演出是否阻塞游戏流程继续(一个函数,返回 boolean类型的结果,判断要不要阻塞) |
15 | | - blockingAuto: Function //演出是否阻塞自动模式(一个函数,返回 boolean类型的结果,判断要不要阻塞) |
| 11 | + // 演出名称,用于在后面手动清除演出,如果没有标识,则代表不是保持演出,给予一个随机字符串 |
| 12 | + performName: string; |
| 13 | + // 持续时间,单位为ms,持续时间到后自动回收演出 |
| 14 | + duration: number; |
| 15 | + // 演出是不是一个保持类型的演出 |
| 16 | + isHoldOn: boolean; |
| 17 | + // 卸载演出的函数 |
| 18 | + stopFunction: () => void; |
| 19 | + // 演出是否阻塞游戏流程继续(一个函数,返回 boolean类型的结果,判断要不要阻塞) |
| 20 | + blockingNext: () => boolean; |
| 21 | + // 演出是否阻塞自动模式(一个函数,返回 boolean类型的结果,判断要不要阻塞) |
| 22 | + blockingAuto: () => boolean; |
| 23 | + // 自动回收使用的 Timeout,一般在调用演出的函数里不设置,演出管理器获取到 IPerofrm 后会根据 duration 自动设置 |
| 24 | + stopTimeout: undefined | ReturnType<typeof setTimeout>; |
| 25 | + // 演出结束后转到下一句 |
| 26 | + goNextWhenOver?: boolean; |
| 27 | + // 对于延迟触发的演出,使用 Promise |
| 28 | + arrangePerformPromise?: Promise<IPerform>; |
| 29 | + // 跳过由 nextSentence 函数引发的演出回收 |
| 30 | + skipNextCollect?: boolean; |
16 | 31 | } |
17 | 32 | ``` |
18 | 33 |
|
| 34 | +第二步,语句调用器 `runScript.ts` 会设定一个自动的计时器,用于结束并卸载对象。 |
| 35 | + |
19 | 36 | 第三步,在演出时间抵达时,卸载演出(语句调用器会在指定时间自动卸载),直到演出列表里没有演出(保持演出则不会卸载) |
20 | 37 |
|
21 | 38 | **注意:`isOver` 为 `true` 时,不会阻塞auto和next,这时候不检查 `blockingNext` 与 `blockingAuto`** |
|
0 commit comments