尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

跨平台输入系统:从 Win32 与 Android 采集原始事件到引擎层抽象

跨平台输入系统:从 Win32 与 Android 采集原始事件到引擎层抽象 开场去年我在做一个跨平台 2D 引擎时,被输入系统卡了两周。Windows 端按键正常,但接到 Android 手游时,虚拟摇杆死活触发不了按下回调。起初以为是输入模块没配好,后来才发现是 Android 上onTouchEvent的getActionMasked()和getActionIndex()用法不对——第二根手指按下时,动作值里混着手指编号,直接和ACTION_DOWN比较永远不相等。键盘事件更是要从dispatchKeyEvent里拦截。更糟的是手柄——Xbox 手柄在 Windows 上走 XInput,PS 手柄在 Android 上走MotionEvent的AXIS_X/Y/Z/RX/RY轴,协议完全不同。如果每个平台都写一套映射,代码很快就会变成意大利面。这篇文章把当时踩过的坑整理出来:先看各平台的事件从硬件到你手里走了哪条路,再谈怎么用一层统一抽象把它们收拢。一、输入事件的完整链路:从硬件中断到你的回调在写代码之前,先搞清楚一个按键从物理按下到引擎收到事件,中间过了几手——这决定了各平台 API 为什么长成那个样子:硬件中断:键盘矩阵扫描到导通,触发中断,控制器把扫描码(Scan Code)交给驱动。操作系统归一化:驱动把扫描码翻译成与布局无关的虚拟键码(Windows 的VK_*、Android 的
返回列表