接上篇:
小白也能写框架之【七、事件管理器】
一、上主菜
assets\Core\Scripts\Managers\TimeMgr.ts
import { Director, director } from “cc”;
import { EDITOR } from “cc/env”;
/** 定义任务类型 */
interface Task {
callback: Function; interval: number; repeat: boolean; elapsed: number;}
/**
时间管理器
提供任务的计时、添加和移除功能。
*/
class TimeMgr {
/** 存储任务列表的映射 */ private taskList: Map<number, Task> = new Map(); /** 下一任务ID */ private nextTaskId: number = 0; /** 更新间隔(毫秒) */ private updateInterval: number = 1000; /** 私有构造函数,确保外部无法直接通过new创建实例 */ private constructor() { if (!EDITOR) { director.once(Director.EVENT_AFTER_SCENE_LAUNCH, this.startTimer, this); } } /** 单例实例 */ public static readonly instance: TimeMgr = new TimeMgr(); /** 启动定时器 */ private startTimer(): void { setInterval(() => { this.updateTimer(this.updateInterval); }, this.updateInterval); } /** * 更新方法,用于在游戏的主循环中调用,更新所有定时任务 * @param dt 自上一次更新以来经过的时间(毫秒) */ private updateTimer(dt: number): void { const tasksToRemove: number[] = []; this.taskList.forEach((task, id) => { task.elapsed += dt; if (task.elapsed >= task.interval) { task.callback(); if (task.repeat) { task.elapsed %= task.interval; } else { tasksToRemove.push(id); } } }); /** 移除已完成的非重复任务 */ tasksToRemove.forEach((id) => this.taskList.delete(id)); } /** * 添加一个新的定时任务 * @param callback 要执行的回调函数 * @param interval 时间间隔,单位为毫秒 * @param repeat 是否重复执行 * @returns 返回一个任务ID,可用于稍后移除定时任务 */ public addTimer(callback: Function, interval: number, repeat: boolean = false): number { const taskId = this.nextTaskId++; this.taskList.set(taskId, { callback, interval, repeat, elapsed: 0 }); return taskId; } /** * 根据任务ID移除定时任务 * @param taskId 要移除的任务的ID */ public removeTimer(taskId: number): void { this.taskList.delete(taskId); }}
/** 时间管理器实例 */
export const timeMgr = TimeMgr.instance;
二、全局映射
三、使用示例
四、效果展示
框架的基本功能到此完结,后面就是一些常用组件
网络啊、多语言啊、UI啊
这些写上去基本就可以用于日常的小游戏开发了


