/* 文件名:Cursor.nut 路径:UI/Windows/System/Cursor.nut 创建日期:2025-10-21 18:46 文件用途: */ class Game_Cursor extends GameWindow { //鼠标精灵数组 MouseSprite = null; //当前鼠标工作ID CurrentMouseTaskId = 0; //鼠标X坐标 MouseX = -100; //鼠标Y坐标 MouseY = -100; constructor() { if (getroottable().rawin("__Game_Cursor__")) { // 防止重复实例化 throw "Game_Cursor 不能重复实例化!"; } base.constructor("系统鼠标", 0, 0, 1280, 720, 0); Init(); //设置鼠标的层级最高 this.SetZOrder(10000000); _SYS_UI_SCENE_Instance_.AddChild(this); } /** * 静态方法:获取唯一实例 * @function * @returns {Game_Cursor} */ function GetInstance() { if (!getroottable().rawin("__Game_Cursor__")) { // 首次调用时创建实例 getroottable()["__Game_Cursor__"] <- Game_Cursor(); } return getroottable()["__Game_Cursor__"]; } function Init() { MouseSprite = []; for (local i = 0; i < 254; i++) { //初始化鼠标精灵 local Buffer = Sprite("sprite/interface/newstyle/windows/cursor.img", i); MouseSprite.push(Buffer); } SetNormalTask(0); } /** * 设置鼠标的普通任务 * @function * @returns {void} */ function SetNormalTask(TaskId) { RemoveChild(MouseSprite[CurrentMouseTaskId]); CurrentMouseTaskId = TaskId; AddChild(MouseSprite[CurrentMouseTaskId]); MouseSprite[CurrentMouseTaskId].SetPos(MouseX, MouseY); } /** * 鼠标窗口是独立的事件函数 * @function * @param {any} EventType * @param {any} EventData * @returns {void} */ function Event(EventType, EventData) { if (EventType == UI_EVENT.MOUSEMOTION) { MouseX = EventData[0]; MouseY = EventData[1]; MouseSprite[CurrentMouseTaskId].SetPos(MouseX, MouseY); } } }