在 SpriteKit 中生成随机地形

Posted

技术标签:

【中文标题】在 SpriteKit 中生成随机地形【英文标题】:Generating random terrain in SpriteKit 【发布时间】:2017-07-03 19:04:29 【问题描述】:

首先我想提一下,我对游戏或 SpriteKit 框架没有深入的了解(但是,我有很好的编程技能)。

我想为 iPhone 和 iPad 创建一个 2D 游戏。到目前为止,我知道我必须使用 SpriteKit。不过,这款游戏最重要的还是地形。我应该能够动态生成它,所以它会有曲线(但不是尖峰边缘),就像附加图像中的黑线一样。另外,我希望将地面的下部分成两个单独的层(一层薄薄的绿色模拟草,其余的一些棕色模拟泥土),但这是很好的选择。

我还想知道当某物(如炮弹)接触到一小部分地面时,我怎样才能“爆炸”它。

有人可以解释或指导我如何实现这一目标吗?

谢谢!

【问题讨论】:

我在这里看到两个问题:1. 如何使用平铺地图和 2. 如何制作“爆炸”动画。 【参考方案1】:

地图生成

您可以在这里尝试两种方法:

    SpriteKit 中的 SKTileMapNode 类 CoreGraphics 中的 CGPath 类。

SpriteKit 方法

首先查看SpriteKit 的平铺地图功能。有一个名为 SKTileMapNode 的类可以帮助您制作基于图块的侧视图或自上而下的游戏世界视图。

Apple 在 WWDC 2016 上介绍了这一点,the session video 是一个很好的起点。 Xcode 有一个很好的编辑器来设置你的瓦片地图,包括特定瓦片的变体(称为“瓦片变体”)和向瓦片添加元数据。所有这些在这里都会有所帮助。

您可以将预先构建的图块组定义为SKTileGroups,用于像山的两侧这样只有彼此相邻才有意义的事物。这样做可能很简单,然后生成一些随机组合。然后,您可以使用不同的变体来显示“爆炸”的图块。

创建磁贴组的首选方法是使用 Xcode 中的编辑器工具。但是,如果您希望以编程方式使用 SpriteKit 的 tile 支持,以下示例将讨论必要的步骤。

-- Apple Documentation, SKTileGroup

相应地,您可以使用SKTileGroupRule 来帮助您定义关于在哪里放置磁贴的规则以编程方式

这是来自 Ray Wenderlich 的 a tutorial,它将带您了解基于图块的游戏的基础知识。这是another RayWenderlich.com tutorial,讨论了程序级别的生成。

CGPath 方法

This answer 讨论了类似的情况,有人询问绘制曲线以用于 SpriteKit。它显示了一些用于生成随机贝塞尔曲线的代码,以及指向 a second answer 的链接,其中深入讨论了 CoreGraphics 对向贝塞尔曲线添加路径的处理。

爆炸

要爆炸瓷砖,请查看SKEmitterNode。 Xcode 包含一个发射器编辑器,您可以用它来做一些很酷的事情。

【讨论】:

感谢您的回答,它几乎涵盖了我所有的问题。然而,我所说的“爆炸”是指以半圆形的形状去除一点地面。您能否也给我一些关于如何实现这一目标的线索? 再次,多个选项:1. 看SKCropNode 2. 您可以尝试使用多个图块变体。 你也可以使用GKNoise 来做地形。在去年的一个 wwdc 视频中@Alec

以上是关于在 SpriteKit 中生成随机地形的主要内容,如果未能解决你的问题,请参考以下文章

Sprite Kit - 使用 Switch Case 将随机 Sprite 节点添加到场景中

Sprite Kit 调用随机方法

在 Sprite Kit 中永远随机移动精灵的最佳方法

Sprite 套件:在匀速运动过程中出现口吃

在 Sprite Kit 中组合多个 SKScene

平台游戏中的 Sprite Kit NPC 随机移动