前言

由于@griffpatch的出色工作, 我们可以在Scratch3.0中使用box2d作为物理引擎。 大家可以在scratch3v3.codelab.club体验它,选择box2d插件即可。

来看个演示:

这个演示结合了box2d插件和Leap Motion。

物理引擎

维基百科对物理引擎的解释非常清晰:

物理引擎是一个计算机程序模拟牛顿力学模型,使用质量、速度、摩擦力和空气阻力等变量。可以用来预测这种不同情况下的效果。它主要用在计算物理学和电子游戏以及计算机动画当中。

以大家熟悉的《塞尔达传说 旷野之息》为例,它拥有极高的自由度,物理引擎功不可没,这款游戏

添加了名为“化学引擎”(Chemistry Engine)的游戏机制,允许游戏中的物体相互影响和引发类似现实世界中的交互反应;例如林克可以使用火把点燃草丛,而风可以使火蔓延到更广的地方,燃烧的草丛产生的热空气能让林克使用滑翔翼飞起来。这种元素之间的叠加会让玩家在探索游戏世界时有更多的选择、可能性和自由度。

box2d

Box2D是一款免费的开源二维物理引擎。

为Scratch3.0添加物理引擎的思路

如果把运动看作时间序列上的位置变化,那么为Scratch3.0添加物理引擎就不困难。并不需要hack底层的东西,通过runtime,我们可以set和get到target的舞台位置数据,于是就可以创建一个extension来负责计算这些数据的变化,从而赋予target物理属性。

后话

从Scratch的这个用例中,我们可以看到这个Scratch强大的可扩展性。

参考