为角色启用二维物理模拟
-
介绍
为项目初始化物理世界后,我们有一个在后台运行的物理引擎。然而,它对精灵一无所知,所以它不能为我们做任何事情。因此,我们需要告诉物理引擎当前的角色应该展现什么样的行为。你也可以把这一步理解为在物理世界里添加一个新的物体,用它来代表当前的角色。
例如,我们可以告诉物理引擎“这个角色应该表现得像一个随重力下落的球”。这样描述之后,物理引擎会帮我们移动这个角色,就好像它是一个球一样。
用一个简单的形状来代表角色
对于我们项目中的大多数角色,我们可以使用某个简单的形状来表示它们,例如长方形或圆形。这允许物理引擎更快地处理角色之间的碰撞。
你可以使用以下积木来告诉物理引擎如何将当前角色视为一个简单的形状:
它需要 4 个输入参数:运动类型
- 固定的:固定的物体不会移动或转动。此选项适用于 地面 或 树 等角色。
- 动态的:动态的物体将表现得像我们周围的自然对象。它可以移动或转动,可以被外力推动或随着重力下落。此选项适用于大多数会动的角色,例如球、石头或人物。
- 可设置速度的:这类物体不受任何力的影响,但我们可以直接设置其移动速度。此选项最适合移动的平台或电梯等角色。
物体类型- 物体:这种类型的角色会与其他角色发生碰撞,例如球或树。
- 传感器:此类角色不会与其他角色发生碰撞。换句话说,其他角色可以从传感器身体上穿过去。此选项最适合可以收集的物体,例如硬币或魔法水瓶。
形状类型
- 圆形:这个选项将允许物理引擎将我们的角色视为一个圆形(一个球),不管它的实际形状是什么。物理引擎将找到可以容纳整个角色的最小圆圈。如果你希望角色像球一样滚动和反弹,这是一个不错的选择。例如,这是为蝴蝶和苹果使用圆形形状时得到的结果。
- 盒子:这个选项将允许物理引擎将我们的角色视为一个盒子(长方形),无论它的实际形状是什么。物理引擎将找到可以容纳整个角色的最小的盒子。如果你希望对象保持直立(而不是左右滚动),那么盒子形状是一个不错的选择。例如,这是为蝴蝶和苹果使用盒子形状时得到的结果。
- 胶囊:
此选项将允许物理引擎将我们的角色视为一个胶囊,无论其实际形状如何。物理引擎将找到可以容纳整个角色的最小胶囊。此选项最适合较高较瘦的对象。例如,这是为蝴蝶和女孩使用胶囊形状时得到的结果:
- 凹形:此选项将允许物理引擎找到一个可以容纳整个角色的凸形。凸形是轮廓上没有凹陷的形状。通常,除非你对之前的 3 种形状都不满意,否则您不会使用此选项。此选项将使形状非常接近角色的实际轮廓,但这个形状往往不规则,也不对称。例如,这是为蝴蝶和女孩精灵使用凸包形状时得到的结果:
调试当此选项为“是”时,物理引擎将绘制出它正在使用的形状(见上面的红色形状)。通常在开发程序时应将此选项设置为“是”,然后在对物理模拟效果感到满意后将其设置为“否”。
将造型移至画布中心
将服装放在画布的中央是翡翠关键的一个条件。你可以选择造型图片,然后将其中心点与画布中心对齐。如果没有进行这一步,我们得到的形状将与角色的位置不匹配。下图说明了这个问题,以及怎样把造型移动到画布中心:
用多种形状的复合体代表角色
有时,上述 4 种简单形状对于某个角色都不够准确。例如,假设我们想用下面的形状为球制作一个滚动的凹槽。如果我们为它使用一个盒子形状或一个凸形,那么物理引擎会将采用一个简单的红色盒子来代表它,而球不会落入凹槽内部:
在这种情况下,物理引擎可以自动把多个凸形拼凑到一起来更准确地代表这个角色,如下所示:
要使用这个复合形状,你需要在矢量模式中绘制这个角色的造型。你可以使用一个或在多个多边形,但必须保证它们整体的中心是在画布的中心。之后,运行以下积木:
与第一个积木相比,唯一的变化是我们不再需要指定某个简单的形状,而是使用 2 个参数来控制物理引擎如何为我们找到多个凸形来拼凑出我们要的形状。
- 曲度容忍度:一个介于 0 和 1 之间的值,代表如果凸形组合不能非常紧密地代表造型中的曲线的时候,你的容忍度有多高。容忍度越高,物理引擎给出结果就越不准确,但计算速度也越快。
- 取点距离:这是复合形状边缘上两点之间的平均距离。较大的距离值会使我们拼凑出来的轮廓更不准确,但计算速度也会更快。