2013-10-08 69 views
3

我的目標是創建一個與SKSpriteNode的輪廓匹配的CGPath。有沒有辦法創建一個SKSpriteNode的CGPath匹配輪廓?

這對創建SKSpriteNodes的發光/輪廓以及物理路徑很有用。

有一種想法我曾經有過,但是我對CIImage並沒有太多的工作,所以我不知道是否有方法訪問/修改像素級別的圖像。

那麼也許我將能夠港這樣的事情的Objective-C:

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

另外要使得這一過程自動化,而不是我的每一個角色創建形狀路徑的其他方法很開放我爲物理或大綱/發光效果做出決定。

+0

這讓每個人都難住@prototypical – DogCoffee

回答

5

你在找什麼叫做等高線追蹤算法Moore neighbor tracing很受歡迎,適用於圖像和地圖。但做check out the alternatives,因爲它們可能更適合你的目的。

如果不是相同(算法類)算法,AFAIK遊行方塊和輪廓跟蹤密切相關。

瓷磚地圖的實現(從瓷磚創建物理形狀)包含在Kobold Kit中。算法的主體位於traceContours method of KKTilemapLayerContourTracer.m

它看起來比實際情況要複雜得多,另一方面它需要一段時間才能圍繞它進行包裝,因爲它是一種「步行」算法,這意味着在當前步驟中使用先前步驟的結果來製作決定。

KK的實現還包括一些針對瓷磚地圖的小修復(即兩個或多個水平或垂直連接的瓷磚成爲一條線,而不是將線劃分爲瓷磚大小的線段)。它也是用自定義點陣列結構創建的,當我將它移植到SK時,我認爲繼續這一點會更容易,只有在最後纔將點數組轉換爲CGPath對象。

如果您可以安全地假定您要跟蹤的形狀不會觸及邊界,並且不能有任何僅對角線連接的圖塊,則可以進行某些優化。當您爲了自己的目的而實際實現算法時,所有這些都變得更加清晰。

但是,就現成的,適合所有用途的解決方案而言:並非沒有。

+0

謝謝,我今天會檢查一下,看看它是否適合我的直接需求。 – prototypical

相關問題