内容提要
这篇文章介绍了将3D环境引入到Snap!编程中的想法。作者通过使用iframe库,将基于web的3D环境与Snap!进行通信和互操作。作者选择了Spline作为3D编辑器,并将其与Snap!结合使用。文章还提到了dynatalk-over-postmessage库的使用,以实现同步通信。
延伸解读
为何选择 Spline 而非深度整合 3D 引擎
作者比较了多种将 3D 引入 Snap! 的方案,最终放弃基于 three.js 或 babylon.js 自研 3D 编辑器的路线,因为工程量巨大且易用性存疑。转而选择 Spline 作为外部编辑器,看中其简单易用和暴露 API 的特点。这种思路将 3D 制作与编程控制分离,类似 Snap! 操作 MicroBlocks 项目的模式,降低了实现难度。
iframe 与 postMessage 的桥梁作用
文章通过通用 iframe 库将基于 Web 的 3D 环境嵌入 Snap!,并利用 postMessage API 实现通信。postMessage 本身是异步的发布/订阅模式,而 dynatalk-over-postmessage 库在此基础上提供了同步通信能力,使得 Snap! 可以像调用本地函数一样与 3D 环境交互,例如 ask _ for _ 积木。这为跨引擎互操作提供了通用基础。
设计哲学:让计算适应人类
作者从 Alan Kay 和 Croquet 团队的视角出发,认为 GUI 的桌面隐喻制造了心理幻觉,让用户能迁移现实经验。3D 环境能进一步增强这种幻觉,因为事物存在于三维空间,更贴近人类的现实认知。将 3D 引入 Snap! 正是为了适应人类而非让人类适应计算,从而提升交互体验。
Q&A
如何将3D环境引入Snap!编程中?
通过使用iframe库,将基于web的3D环境与Snap!进行通信和互操作。
为什么选择Spline作为3D编辑器?
Spline是最简单易用的3D工具,极大降低了3D项目的制作难度。
dynatalk-over-postmessage库的作用是什么?
该库用于实现Snap!与iframe中3D环境的同步和异步通信。
Snap!通常用于什么类型的项目?
Snap!通常用于制作2D项目,但作者希望引入3D环境。
如何实现Snap!与3D环境的通信?
通过postMessage API,Snap!可以与iframe中的3D环境进行通信。
引入3D环境对用户体验有什么影响?
引入3D环境旨在增强用户的交互体验,使计算适应人类,而不是让人类适应计算。