3

我的目标是创建一个与 SKSpriteNode 的轮廓相匹配的 CGPath。

这将有助于创建 SKSpriteNodes 的发光/轮廓以及物理路径。

一个想法是我有过,但我并没有真正使用 CIImage 进行太多工作,所以我不知道是否有一种方法可以在像素级别访问/修改图像。

那么也许我可以将这样的东西移植到 Objective-C :

http://www.sakri.net/blog/2009/05/28/detecting-edge-pixels-with-marching-squares-algorithm/

与我为物理或轮廓/发光效果制作的每个精灵创建形状路径相反,我对其他使该过程自动化的方法也非常开放。

4

1 回答 1

5

您正在寻找的是所谓的轮廓跟踪算法Moore 邻居追踪很流行,并且适用于图像和瓦片地图。但是请检查替代方案,因为它们可能更适合您的目的。

AFAIK 行进广场和轮廓跟踪密切相关,如果不是相同的(类)算法。

Kobold Kit中包含瓷砖地图的实现(从瓷砖创建物理形状)。该算法的主体位于 KKTilemapLayerContourTracer.m 的traceContours方法中

它看起来比实际上更复杂,另一方面,它需要一段时间才能理解它,因为它是一种“行走”算法,这意味着在当前步骤中使用先前步骤的结果来做出决策。

KK 实现还包括一些专门针对瓦片地图的小修复(即两个或多个水平或垂直连接的瓦片变成一条线,而不是将线分成瓦片大小的段)。它也是使用自定义点数组结构创建的,当我将它移植到 SK 时,我决定继续使用它会更容易,只有在最后将点数组转换为 CGPath 对象。

如果您可以安全地假设您尝试跟踪的形状不会接触边界,并且不能有任何仅对角连接的图块,则可以进行某些优化。当您为自己的目的实际实施算法时,所有这些都会变得更加清晰。

但就现成的、万能的解决方案而言:没有。

于 2013-10-09T13:11:51.503 回答