主要观点:尽管计算机图形输出的模型和包有重要进展,但鼠标、键盘等输入设备的处理方式变化甚微,2022 年仍主要基于事件和回调处理用户输入,这种方式虽仍广泛使用但存在问题,如事件处理代码复杂难修改。为理解其优缺点并尝试其他方法,作者用三种风格编写简单示例。
关键信息:
- 介绍一个可拖动或点击的正方形示例及至少两个 bug。
- 第一种方法基于事件监听器,存在共享状态及
pointerup
处理的问题。 - 第二种方法是轮询,需额外复杂处理,有控制流更明确及可自由访问输入设备状态等优点,也有需频繁检查状态的缺点。
- 第三种方法受 Squeak 启发,基于进程(轻量级控制线程),用 Abro.js 库实现,有清晰显式的状态序列、分离关注点等优点。
- 还提到状态图和函数响应式编程等未深入探讨的方法。
重要细节:
- 事件监听器示例中通过多个事件处理函数共享
didDrag
等状态来处理不同操作及状态。 - 轮询示例中需用
didHandlePointerDown
避免多次响应鼠标按下,还需自己进行碰撞检测。 - Abro.js 中每个进程是异步函数,可被外部终止,
abro.or
可启动多个进程并在一个完成时终止其他,能实现无显式退出条件的循环。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。