二、现象细节
- 聊天输入框中已经打出的文字全部丢失
- Flash 弹出 "已停止工作" 提示,或窗口直接白屏卡死
- 必须刷新页面重新登录,严重影响正常游戏
- 截图功能正常,说明不是显卡驱动或系统环境问题
- 录屏、直播、屏幕分享功能也存在类似崩溃,疑与图形捕获管道的焦点状态有关
三、原因推测
(基于 Flash Player 机制的专业分析)
综合现象特征,基本可以锁定问题出在
TextField(文本输入框)的键盘焦点与场景切换的时序冲突 上:
1. 打字中的焦点状态
玩家在聊天框中打字时,Flash Player 的全局键盘焦点(stage.focus)由聊天输入框持有。此时系统
IME、光标闪烁定时器、键盘事件全部绑定在该输入框上。
2. 战斗切入时的场景切换
当服务器下发强制战斗包,客户端需要将当前世界场景切换为战斗场景。这个过程中,聊天相关的 UI 组件会被隐藏或暂时移出显示列表。
3. 崩溃的成因
推测:战斗切入时,聊天输入框的键盘焦点没有被主动释放。当输入框所在的 UI 层被隐藏或移出显示列表后,Flash Player
底层的文本编辑引擎仍在试图访问一个已不在渲染树中的 TextField 对象(包括 IME
输入管道刷新、光标位置更新、文本布局重算等操作),导致空引用异常或访问违规,Flash 进程直接崩溃。
关键证据:
- 如果打字过程中按回车先发送消息(触发 sendChatMsg 清空输入框并归还焦点),则无论如何切入战斗都不会崩溃
- 截图功能完全正常:截图走的是位图绘制管线,不涉及 TextField 焦点和 IME,因此不受影响
- 崩溃 100% 复现,且与硬件、系统无关,说明是纯软件逻辑问题