From 3789e0814e8136af3c3fdce950a63290365381ac Mon Sep 17 00:00:00 2001 From: Joywayer Date: Wed, 26 Aug 2026 23:53:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=8C=E4=B8=83=E7=8E=8B=EF=BC=9A=E6=8E=A5?= =?UTF-8?q?=E9=80=9A=E5=B9=B3=E5=8F=B0=E7=B2=BE=E7=81=B5=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=E9=93=BE=E8=B7=AF=EF=BC=88SubGameHooks=20=E2=86=92=20SpriteEve?= =?UTF-8?q?ntController=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SubGameHooks 原是空骨架,Game_Modify.* → SubGameHooks.* → SpriteEventController 这条链是断的:不仅数字叠绘的绘制回调不会触发,转发壳里已注册的 13 号战绩按钮、 150 号帮助按钮、248 号协议勾选也收不到事件。 实现 utlmousedown / utlmousedown_nomove / mouseup / utlmousemove / utlgamemydrawbegin / gamemydraw 六个 hook,只做转发、不写业务逻辑, 参数顺序逐个对齐 SpriteEventController.handleXxx 的签名(错位会让事件静默失效), 转发前判断依赖存在,防御风格与转发壳一致。 Co-Authored-By: Claude Opus 5 (1M context) --- client/js/01_SubGame/codes/SubGameHooks.js | 43 +++++++++++++++++++--- 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/client/js/01_SubGame/codes/SubGameHooks.js b/client/js/01_SubGame/codes/SubGameHooks.js index d038f57..e076660 100644 --- a/client/js/01_SubGame/codes/SubGameHooks.js +++ b/client/js/01_SubGame/codes/SubGameHooks.js @@ -38,23 +38,54 @@ var SubGameHooks = window.SubGameHooks || {}; // ===== Game_Modify.*(事件/交互,来自 01,9) ===== +// --------------------------------------------------------------------------- +// 精灵交互 6 件套:【只做转发,不写任何业务逻辑】 +// +// 平台事件到达框架的完整链路: +// 引擎 → Game_Modify.xxx(01 转发壳) → SubGameHooks.xxx(本文件) → SpriteEventController.handleXxx +// → 按精灵 ID 分发到各 UI 组件注册的 handler +// +// 这一段接不上,整条链就是断的:不仅数字叠绘(NumberRenderer 的绘制回调)不会被触发, +// 连转发壳里已注册的 13 号战绩按钮、150 号帮助按钮、248 号协议勾选也收不到事件。 +// 参数顺序必须与 SpriteEventController.handleXxx 的签名逐个对齐——错位会让事件【静默失效】。 +// 防御风格与转发壳一致:先判断依赖存在再转发。 +// --------------------------------------------------------------------------- + // [A] utlmousedown(gameid, spid, downx, downy, no1, no2, no3, no4, no5, no6):精灵按下事件;子游戏转发到 SpriteEventController。 -// SubGameHooks.utlmousedown = function (gameid, spid, downx, downy, no1, no2, no3, no4, no5, no6) { /* ... */ }; +SubGameHooks.utlmousedown = function (gameid, spid, downx, downy, no1, no2, no3, no4, no5, no6) { + if (typeof SpriteEventController === 'undefined') { return; } + return SpriteEventController.handleMouseDown(gameid, spid, downx, downy, no1, no2, no3, no4, no5, no6); +}; // [A] utlmousedown_nomove(gameid, spid, downx, downy, timelong, no1, no2, no3, no4, no5):精灵按下(无移动)事件。 -// SubGameHooks.utlmousedown_nomove = function (gameid, spid, downx, downy, timelong, no1, no2, no3, no4, no5) { /* ... */ }; +SubGameHooks.utlmousedown_nomove = function (gameid, spid, downx, downy, timelong, no1, no2, no3, no4, no5) { + if (typeof SpriteEventController === 'undefined') { return; } + return SpriteEventController.handleMouseDownNoMove(gameid, spid, downx, downy, timelong, no1, no2, no3, no4, no5); +}; // [A] mouseup(gameid, spid_down, downx, downy, spid_up, upx, upy, timelong, no1, no2):精灵抬起事件。 -// SubGameHooks.mouseup = function (gameid, spid_down, downx, downy, spid_up, upx, upy, timelong, no1, no2) { /* ... */ }; +SubGameHooks.mouseup = function (gameid, spid_down, downx, downy, spid_up, upx, upy, timelong, no1, no2) { + if (typeof SpriteEventController === 'undefined') { return; } + return SpriteEventController.handleMouseUp(gameid, spid_down, downx, downy, spid_up, upx, upy, timelong, no1, no2); +}; // [A] utlmousemove(gameid, spid, downx, downy, movex, movey, timelong, offmovex, offmovey, no1):精灵移动事件。 -// SubGameHooks.utlmousemove = function (gameid, spid, downx, downy, movex, movey, timelong, offmovex, offmovey, no1) { /* ... */ }; +SubGameHooks.utlmousemove = function (gameid, spid, downx, downy, movex, movey, timelong, offmovex, offmovey, no1) { + if (typeof SpriteEventController === 'undefined') { return; } + return SpriteEventController.handleMouseMove(gameid, spid, downx, downy, movex, movey, timelong, offmovex, offmovey, no1); +}; // [A] utlgamemydrawbegin(gameid, spid, times, timelong, no2, no3, no4, no5, no6, no7):精灵绘制开始事件。 -// SubGameHooks.utlgamemydrawbegin = function (gameid, spid, times, timelong, no2, no3, no4, no5, no6, no7) { /* ... */ }; +SubGameHooks.utlgamemydrawbegin = function (gameid, spid, times, timelong, no2, no3, no4, no5, no6, no7) { + if (typeof SpriteEventController === 'undefined') { return; } + return SpriteEventController.handleDrawBegin(gameid, spid, times, timelong, no2, no3, no4, no5, no6, no7); +}; // [A] gamemydraw(gameid, spid, times, timelong, no2, no3, no4, no5, no6, no7):精灵绘制帧事件。 -// SubGameHooks.gamemydraw = function (gameid, spid, times, timelong, no2, no3, no4, no5, no6, no7) { /* ... */ }; +SubGameHooks.gamemydraw = function (gameid, spid, times, timelong, no2, no3, no4, no5, no6, no7) { + if (typeof SpriteEventController === 'undefined') { return; } + return SpriteEventController.handleDraw(gameid, spid, times, timelong, no2, no3, no4, no5, no6, no7); +}; // [A] OpenCreateRoom():打开创建房间界面。 // SubGameHooks.OpenCreateRoom = function () { /* ... */ };