处理用户输入的三种方式

主要观点:尽管计算机图形输出的模型和包有重要进展,但鼠标、键盘等输入设备的处理方式变化甚微,2022 年仍主要基于事件和回调处理用户输入,这种方式虽仍广泛使用但存在问题,如事件处理代码复杂难修改。为理解其优缺点并尝试其他方法,作者用三种风格编写简单示例。

关键信息

  • 介绍一个可拖动或点击的正方形示例及至少两个 bug。
  • 第一种方法基于事件监听器,存在共享状态及pointerup处理的问题。
  • 第二种方法是轮询,需额外复杂处理,有控制流更明确及可自由访问输入设备状态等优点,也有需频繁检查状态的缺点。
  • 第三种方法受 Squeak 启发,基于进程(轻量级控制线程),用 Abro.js 库实现,有清晰显式的状态序列、分离关注点等优点。
  • 还提到状态图和函数响应式编程等未深入探讨的方法。

重要细节

  • 事件监听器示例中通过多个事件处理函数共享didDrag等状态来处理不同操作及状态。
  • 轮询示例中需用didHandlePointerDown避免多次响应鼠标按下,还需自己进行碰撞检测。
  • Abro.js 中每个进程是异步函数,可被外部终止,abro.or可启动多个进程并在一个完成时终止其他,能实现无显式退出条件的循环。
阅读 28
0 条评论