二维物理 - 模拟水滴(难度:3)
-
介绍
在本教程中,你将使用二维物理引擎构建一个有趣的动画:模拟桶中的水滴。

第 1 步 - 初始化二维物理世界
请在创益编程平台新建一个项目,删除小狗角色,然后在空角色中添加以下积木,用来初始化二维物理世界。

这个物理世界我们是看不到的。它由二维物理引擎管理。如果没有这一步,我们就不能使用“二维物理”类别中的任何其他积木。在这个程序中,我们将 Y 方向的重力加速度设置为 -100。由于数字是负数,这意味着物体将沿 Y 方向下落。
第 2 步 - 添加小球造型
我们将使用小球来代表水滴。请切换到造型页,并添加“球-b”这个造型:

我们还需要把角色变小:请把它的比例设置为 30% :
第 3 步 - 让小球跟随鼠标
接下来,我们在按下鼠标时,让球移动到鼠标指针位置的正上方。我们可以使用一个重复循环来检查鼠标是否被按下。如果是被按下,我们就将小球角色移动到鼠标的 X 位置,和 10 加上鼠标的 Y 位置。注意,如果我们直接使用鼠标的 Y 位置(如果不加10),小球就会正好位于鼠标指针下方,这会将它切换到拖动模式,而我们并不希望进入拖动模式。

每当你按下并拖动鼠标按钮时,小球应该随着移东到鼠标上方:
第 4 步 - 创建克隆
我们将使用小球角色的克隆来代表小水滴。我们可以在每次移动小球后都创建一个新的克隆:

现在我们就可以用小球的克隆“绘制”一串“脚印”了:
第 5 步 - 为每个克隆体添加物理实体
现在我们要将这些克隆交给物理引擎管理。它将帮助我们使小球角色表现得像真正的球。每当创建一个新的克隆时,我们将它转换为圆形物理物体:

现在我们的克隆就“变活了”,因为物理引擎会让它们互相碰撞,并随重力下落。
第 6 步 - 隐藏原始角色
由于我们只使用这个小球角色的克隆来表示水滴,所以原始角色就尴尬的留在舞台上的一动不动:

我们可以使用“隐藏”积木来隐藏原始角色,然后在创建克隆后“显示”它们:
第 7 步 - 绘制水桶
接下来,让我们创建一个桶来装载这些“水滴”。创建一个名为“水桶”的新的角色,并使用 3 个长方形绘制一个类似水桶的造型,如下所示:

请注意,最后你需要选择所有的长方形,并将它们整体的中心与画布的中心对齐。
第 8 步 - 发送消息创建水桶
为了启动水桶角色中的程序,我们应该从“空角色1”发送一条消息。这确保我们在物理世界被初始化后才创建水桶。
在 “空角色1” 中, 发送“添加水桶”的消息:

之后 在 “水桶” 角色中, 接收这条消息:
第 9 步 - 将水桶移动到中心
在水桶角色中,让我们首先重置这个角色的位置和方向:

第 10 步 - 向物理引擎描述水桶
接下来,我们将告诉物理引擎我们希望水桶在物理模拟中如何表现。这个水桶是一个“凹”的形状,因为它的顶部边缘向下弯曲,我们不能用一个简单的长方形盒子来代表它。因此,在物理世界中,我们需要使用一个“复合形状”来代表它:

我们把水桶设置为一个“可设速度的”对象。因为我们不需要它因为重力而下落,所以它不需要是“动态的”。但是我们又需要旋转它,所以它也不应该是“固定的”。
由于我们将“调试”参数设置为“是”,我们可以看到物理引擎创建的复合形状,它由 3 个红色盒子组成。这正是我们所需要的,因此我们可以将“调试”参数设置回“否”,以隐藏这些红色盒子。

到这里,我们的水桶就已经可以装一些“水滴”了:
第 12 步 - 使水桶旋转
最后,为了让动画更有趣,我们让水桶绕着自己旋转。

这是最终效果:
创意点子
请尝试使用在本教程中用到的知识创建一些新动画。以下是一些供你参考的创意:
-
彩球:你可以添加多个不同颜色的小球造型,并在每次创建新的克隆之前切换小球的造型。
-
不同的水桶形状:你可以为水桶角色绘制一个不同的形状。
-
使水桶左右摇摆:目前水桶只能单向的旋转。你可以试着让它左右摇摆,这样它里面的水滴就不会洒出来。
-
更新物理属性:尝试改变物理世界中的重力加速度和物体的摩擦/弹性系数。观察并解释它们所造成的变化。
-
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login