有意跟踪每个活动指针
对于简单的拖动,在 pointerdown 时保存 pointerId,并且只在该指针保持活动状态时更新。指针捕获可确保指针移出游戏元素的边界后,后续移动和释放事件仍会发送给该元素。分别处理 pointerup 和 pointercancel,并在两种结束路径中清除状态,避免手势中断后游戏卡住。
不要假设只有一个指针,除非设计限制输入。第二根手指、笔或鼠标可以产生另一个pointerId。如果游戏支持一次主动拖动,则可以预见地忽略其他指针,而不是让它们覆盖第一个拖动。
当设备类型很重要时选择
PointerEvent 为触摸、笔和鼠标需要不同处理的情况公开了pointerType。例如,绘图机制可以使用笔压力,而菜单按钮应该接受任何主指针。避免仅仅为了重新创建单独的事件系统而在设备类型上进行分支;它添加了测试路径,但没有改善玩家的交互。
浏览器可能会在指针输入后触发兼容性的鼠标事件,因此不要通过两套事件系统重复处理同一操作。设备在支持范围内时,分别测试鼠标、触摸和触控笔。MDN 介绍了指针捕获、指针标识符,以及指针事件与鼠标事件之间的关系。
关于游戏的指针事件的常见问题
指针事件使鼠标和触摸相同吗?
它们共享一个事件模型,但属性和用户期望仍然可能不同。仅当游戏机制有特定于设备的具体需求时,才使用pointerType 或其他事件详细信息。
游戏什么时候应该使用指针捕获?
当拖动中的指针离开元素的命中区域后,游戏仍需继续接收移动和释放事件时,使用指针捕获。清理时释放捕获,并处理取消事件。
延伸阅读
发现信息过时了? 报告需要更正的内容