我開始學習使用SpriteKit在iOS上開發Swift2,並且我似乎無法檢測到我是否觸摸了我的Sprite的可見部分。使用SpriteKit檢測Sprite內邊界框(alpha掩碼)內的觸摸
我能找到這點很感動這樣的:
let touchedNode = self.nodeAtPoint(location)
但這種檢測在精靈的觸摸。我想檢測只在精靈的「不透明」部分觸摸。
我試圖與阿爾法遮掩邊框創建PhysicsBody和測試,如果我選擇的節點的邊界框包含觸摸這樣的位置:
sprite.physicsBody = SKPhysicsBody.init(texture: sprite.texture!, size: sprite.size)
sprite.physicsBody?.affectedByGravity = false
if (touchedNode.containsPoint(location)){
但它並沒有幫助。如果我點擊我的精靈的透明部分,事件仍會觸發。
文檔中提到「創建了一個新的物理體,其中包含紋理中具有非零阿爾法值的所有紋理元素」,所以不應該有效嗎?
謝謝你的時間。 PS:我也試圖在我的alpha閾值上更加慷慨,但這也不起作用(如果我的透明度不夠完美)。
UPDATE:
增添了幾分更多的細節,我建立一個關卡編輯器。這意味着我將創建許多節點,具體取決於用戶選擇的內容,並且我需要能夠選擇/移動/旋轉/等這些節點。我實際上使用SKSpriteNodes,因爲我的PNG圖片以這種方式自動添加到xcassette中。我決定使用PhysicsBody的Alpha Mask邊界框,因爲這個值在場景編輯器(Xcode)中顯示,當您選擇一個節點時,並且選中時,Alpha Mask會精確地突出顯示我想要的Sprite的部分檢測內部的觸摸。
如果我使用錯誤的想法/技巧,請告訴我。這是可能的,因爲我只開始使用Swift和SpriteKit。
更新2
我質疑physicsWord(推薦),以得到正確的physicsBody,得到了這樣的連接節點的名稱:
let body = self.physicsWorld.bodyAtPoint(location)
print(body?.node?.name)
但是這仍然是印刷節點的名稱,即使我觸摸邊界框外面,這對我來說沒有意義。
謝謝你的幫助。
您是否找到了一種很好的方法來做到這一點? – Confused