我有一個SKSpriteNode
。這SKSpriteNode
有幾個孩子。我如何檢測它是否被觸摸?現在,讓我清楚,我已經知道在SpriteKit中設置一個按鈕,我嘗試使用與用於檢測主父節點是否已被觸摸的代碼相同的代碼,但它不起作用。該按鈕不做任何事情。有沒有辦法來解決這個問題?另外,我已經嘗試將用戶交互設置爲對於子節點爲true。如何檢測是否有子節點被觸摸:Sprite Kit
回答
這裏是跟蹤連續觸摸(即方向箭頭)的一種方法。
你需要跟蹤的觸摸,在SKScene節點,或者在父視圖控制器:
var touches = Set<UITouch>()
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.touches.formUnion(touches)
self.updateTouches()
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
self.touches.formUnion(touches)
self.updateTouches()
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
self.touches.subtract(touches)
self.updateTouches()
}
override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {
self.touches.subtract(touches)
self.updateTouches()
}
對於每個觸摸的座標轉換爲相對SKNode。檢查是否有任何觸摸位於SKNode的累積幀內。累積幀是節點及其所有後代的總邊界區域。
private func isTouching(node: SKNode) -> Bool {
guard let parent = node.parent else {
return false
}
let frame = node.calculateAccumulatedFrame()
for touch in touches {
let coordinate = touch.location(in: parent)
if frame.contains(coordinate) {
return true
}
}
return false
}
例如:
override func update(_ currentTime: NSTimeInterval) {
let touchingJump = isTouching(node: jumpButtonNode)
if touchingJump {
print("jump")
}
}
你需要實現這個方法
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
print("Touched")
}
的關聯要監視觸摸事件的每一個節點類。因此,您應該將此方法添加到主SKSpriteNode
的每個後代中。
此代碼不會做任何事情。 –
@LukeVanIn:我給我的方法添加了一個打印。謝謝你的提示。 –
你是什麼意思「實現這個方法在關聯到你監視觸摸事件的每個節點的類上」所以你應該將這個方法添加到你的主SKSpriteNode的每個後代?那代碼在哪裏?我以前的印象touchesBegan只適用於SKView ...但我很困惑... – Confused
- 1. Sprite節點沒有檢測到觸摸?
- 2. Sprite Kit檢測觸摸位置
- 3. 如何檢查是否有子節點被觸摸Swift 3
- 4. Sprite kit節點在接觸時口吃
- 5. 如何檢測字段是否被觸摸或點擊?
- 6. 檢測屏幕是否被觸摸
- 7. iAds禁用觸摸Sprite Kit和Swift
- 8. Sprite Kit檢測碰撞?
- 9. 是否有可能檢測UIButton何時被觸摸?
- 10. beginner swift sprite kit - 節點碰撞檢測幫助(SKPhysicsContact)
- 11. 如何檢測Sprite套件中的觸摸tvOS
- 12. 如何檢測Android設備是否被觸摸或移動
- 13. 如何檢測圖像是否被觸摸
- 14. 如何判斷是否所有的特定節點都在Sprite-Kit中去掉
- 15. Swift + Sprite套件觸摸檢測
- 16. 如何檢測視圖沒有被觸摸/點擊?
- 17. 如何檢查我的子視圖是否被觸摸?
- 18. Sprite Kit PhysicsBody,檢查兩個物體是否相互接觸
- 19. 是否可以檢測Magic Mouse/Trackpad是否被觸摸?
- 20. 我如何檢測SKSpriteNode已被觸摸
- 21. Sprite Kit:看不到現有節點的孩子
- 22. Sprite Kit/Objective C:什麼是對象的「觸摸指示器」
- 23. 如何檢測我選擇的子節點是否是特定的子節點?
- 24. Sprite Kit中的多點觸控手勢
- 25. 觸摸後如何檢測觸摸
- 26. 如何檢測多點觸摸事件?
- 27. CC3Node - 檢測CC3Node子節點上的觸摸
- 28. 如何檢測設備是否在Titanium中有觸摸屏?
- 29. Sprite Kit中的彈跳節點
- 30. 避免Sprite Kit節點彼此堆疊
此代碼不編譯 –
@appzYourLife也不應該。你想說什麼? –
@appzYourLife您是否指的是它不能用swift 2編譯的事實? –