我目前正在使用街機應用程序,用戶點擊精靈跳過障礙物並向下滑動以便在障礙物下滑動。我的問題是,當我開始滑動時,touchesBegan函數被調用,所以精靈跳轉而不是滑動。有沒有辦法區分這兩個?在Spritekit中區分滑動觸摸 - Swift 3
回答
您可以使用手勢狀態來微調用戶交互。手勢協調一致,所以不應互相干擾。
func handlePanFrom(recognizer: UIPanGestureRecognizer) {
if recognizer.state != .changed {
return
}
// Handle pan here
}
func handleTapFrom(recognizer: UITapGestureRecognizer) {
if recognizer.state != .ended {
return
}
// Handle tap here
}
如何使用觸摸控制略有延遲?我有一個遊戲,在那裏我使用SKAction做類似的事情。您還可以選擇設置的位置屬性,讓您的自我一點回旋的餘地與touchesMoved方法的櫃面有人有顛簸的手指(感謝KnightOfDragon)
let jumpDelayKey = "JumpDelayKey"
var startingTouchLocation: CGPoint?
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
let location = touch.location(in: self)
// starting touch location
startingTouchLocation = location
// start jump delay
let action1 = SKAction.wait(forDuration: 0.05)
let action2 = SKAction.run(jump)
let sequence = SKAction.sequence([action1, action2])
run(sequence, withKey: jumpDelayKey)
}
}
func jump() {
// your jumping code
}
只要確保延遲不會太長,使你的控件不要覺得沒有反應。玩你想要的結果的價值。
比移動方法,你刪除SKAction你的觸摸,如果你的舉動已經達到閾值
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
let location = touch.location(in: self)
guard let startingTouchLocation = startingTouchLocation else { return }
// adjust this value of how much you want to move before continuing
let adjuster: CGFloat = 30
guard location.y < (startingTouchLocation.y - adjuster) ||
location.y > (startingTouchLocation.y + adjuster) ||
location.x < (startingTouchLocation.x - adjuster) ||
location.x > (startingTouchLocation.x + adjuster) else {
回報}
// Remove jump action
removeAction(forKey: jumpDelayKey)
// your sliding code
}
}
雖然我不知道,你可以玩的手勢識別器將工作以及它如何影響響應者鏈。
希望這有助於
這不是一個可行的答案,你需要添加閾值並追蹤觸摸動作。如果有人有一個痙攣的手指怎麼辦?對於那個用戶,他們很感動,但是對於代碼,他們正在移動他們的手指 – Knight0fDragon
這是真的,我只是添加了額外的位置檢查。 – crashoverride777
嗯,當你移動一個啓用了觸摸的精靈時會發生什麼?你失去了touchmoved電話? – Knight0fDragon
- 1. 連續觸摸/移動Swift和SpriteKit
- 2. 觸摸時未檢測到Swift/Spritekit SKNode
- 3. 在swift中觸摸方法中的滑動手勢
- 4. Unity3d觸摸滑動
- 5. 在觸摸設備中處理滑動
- 6. 如何將節點移動到我使用Swift在SpriteKit中觸摸的位置?
- 7. 平滑移動與觸摸
- 8. Galleryview-Differentiate觸摸和滑動
- 9. (Swift SpriteKit)在觸摸方向上旋轉精靈
- 10. Spritekit/UIBeziers:檢測觸摸/ nodeAtPoint
- 11. 使用SpriteKit在Swift 3中不一致的接觸檢測
- 12. Swift 3的webview觸摸事件
- 13. 觸摸位置使用按鈕swift 3
- 14. 未觸發觸摸和滑動事件
- 15. TVOS:檢測觸摸按開始和功能(Swift Spritekit)
- 16. Swift 3(SpriteKit):製作彈丸移動
- 17. 轉換UITapGestureRecognizer的SpriteKit的觸摸位置 - Swift
- 18. 觸摸「通過」另一個物理體? Swift/Spritekit
- 19. Android ListItem半滑動觸摸移動
- 20. ios中的平滑觸摸
- 21. jQuery的滑動效果[觸摸]
- 22. SpriteKit:在大精靈中創建可觸摸區域 - 基於精靈內部觸摸的位置來處理SKA
- 23. 通過觸摸滑動滑動頁面內的活動
- 24. 滑動菜單觸摸關閉和從右向左滑動
- 25. 區分按鈕觸摸和屏幕觸摸
- 26. 如何顯示觸摸滑動軌跡?
- 27. 多點觸摸滑動手勢
- 28. 使用quo.js觸摸滑動座標
- 29. Android平滑垂直滾動觸摸
- 30. 找到觸摸和滑動的速度?
使用手勢來區分 – Knight0fDragon
但我想挖掘不執行一些動作 –
...水龍頭是一種姿態,所以是一個刷卡 – Knight0fDragon