视差效果的公式

Spa*_*Dog 1 iphone ipad ios

我正在创建一个具有 3 层(远、近、近)的 SpriteKit 游戏,我希望这些层在角色奔跑时以不同的水平速度移动。事实上,角色永远不会从中心移动,地板/背景是从右向左移动的。

是否有一个公认的公式可以很好地创建多层视差效果?

谢谢

Jas*_*son 6

您可以将其视为相似三角形问题。想象一下地平线上的一个点,就在你的游戏后面。假设该点距离屏幕 H 米,其中 H 是一个很大的数字。您可以选择该数字为您想要的任何数字。当你改变它的值时,效果也会相应改变。你必须尝试一下才能知道你喜欢什么。

假设第一层的速度为 1(或某个常数的一倍)。然后,屏幕以1的速度、H的距离移动。

现在假设每一层距前一层到地平线的距离为 x。同样,像 H 一样,您可以选择 x 为任何您想要的值,以达到所需的效果,只要 x 比 H 小。

因此,例如,前景距屏幕的距离为 0,第一层后面的距离为 x 个单位,第二层的距离为 2x 个单位,依此类推。

现在我们可以做类似的三角形了。屏幕层在距地平线距离 H 处的速度为 1。第二层后面以未知速度 (y) 距地平线距离 Hx。我们知道:

H / 1 = (H - x) / y
Run Code Online (Sandbox Code Playgroud)

或者求解 y:

y = (H - x) / H
Run Code Online (Sandbox Code Playgroud)

为进入屏幕的第一层。


更通用的公式如下:

speed(i) = ((H - ix) a) / H
Run Code Online (Sandbox Code Playgroud)

在哪里:

  • a - 前景(屏幕)层的速度
  • i - 我们正在计算速度的层
  • x - 每层距最后一层到屏幕的距离(更改此值以调整视差效果)
  • H - 到地平线的距离(必须大于层数乘以 x。更改此值以调整视差效果)