如何创建精灵表面,如" cham cham"

时间:2014-04-12 06:47:05

标签: ios objective-c sprite-kit

我的问题可能有点过于宽泛,但我会选择这个概念。我如何创造表面,就像他们在" Cham Cham"应用

https://itunes.apple.com/il/app/cham-cham/id760567889?mt=8

我在应用程序中完成了大部分工作,但用户触摸的表面更改是完全不同的。你可以改变它的高度,它会增长和缩小。如何使用精灵工具包完成这个概念背后的概念是什么,任何人都可以解释一下。

由于

1 个答案:

答案 0 :(得分:3)

以下是Cham Cham开发人员的回答:)

让我将解释分成不同的部分:

注意:由于项目已经开始很久以前,它是使用纯OpenGL实现的。 SpiteKit实现可能会有所不同,但您只需要将想法映射到它。

定义基础

地面由一组点表示,这些点使用Hermite Spline进行插值。基本上,游戏使用一堆定义表面的点,以及每个控件之间的一组点,如下所示:

enter image description here

红点是控制点,使用提到的Hermite插值计算其间的输入。中间的绿点与它无关,但让整个事情看起来像胸部:)

您可以选择任意数量的步骤,让您的胸部看起来尽可能平滑,但这更多地与性能有关。

控制形状

您需要做的就是允许用户移动控制点(或其中一些控制点,如Cham Cham;您可以定义每个点可以移动的范围等)。重新计算插值会产生一个变化的形状,它始终保持平滑(假设您已经选择了足够的中间点)。

纹理化

同样,由你决定如何应用纹理。在Cham Cham,我们使用一个大的纹理来保存背景图像,并在每次变形时重新计算纹理坐标。您可以尝试更复杂的算法,例如挤压纹理或任何您认为合适的算法。

对于表面纹理(覆盖地面的纹理 - 草,冰,沙等) - 你可以使用名为Triangle Strips的东西,其中“底部”顶点位于表面的每个插值点和“顶部”顶点凸起(通过在该点的法线方向上抵消“底部”顶点)。

渲染

最简单的方法是使用一些tesselation库,例如libtess。它会做什么将你的边界线(由插值点组成)转换成一组三角形。它将保留纹理坐标,以便您可以将这些三角形提供给渲染器。

SpriteKit note

不幸的是,我对SpriteKit引擎并不是很熟悉,所以不能保证你能够一对一地复制这个想法,但请随意评论实施的挑战性方面,我会尝试帮助