Итак, я делаю игру spritekit, используя Swift. И мне было интересно, что лучше всего использовать жестами?
В настоящее время у меня есть override func touchesBegan
, обрабатывающий все нажатия, и UILongPressGestureRecognizer
, обрабатывающий длинные нажатия/удержания.
Итак, вы знаете, тап нажимает кнопки и герой прыгает. Долгая задержка заставляет героя пригнуться.
По какой-то причине моя функция longPress не всегда вызывается (иногда вы можете нажать и удерживать 10 раз, а затем она перестает вызываться (не распознается), в других случаях это 5, это меняется), и это привело к тому, что вчера целый день пробовать новые вещи и исследовать, что привело меня к этому вопросу.
Лучше использовать touchesBegan
или переместить все мои сенсорные вызовы в новую функцию, обрабатываемую UITapGestureRecognizer
?
Я переместил все с touchesBegan
на UITapGestureRecognizer
, но это кажется очень вялым. Но, может быть, я неправильно это реализовал?
Вот как настроены recognisers
:
func setupRecognizers() {
let tapRecognizer = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
view!.addGestureRecognizer(tapRecognizer)
let longTapRecognizer = UILongPressGestureRecognizer(target: self, action: Selector("handleLongPress:"))
longTapRecognizer.minimumPressDuration = 0.2
view!.addGestureRecognizer(longTapRecognizer)
}
Это функции, которые обрабатывают жесты:
func handleTap(recognizer: UIGestureRecognizer) {
//currently all handled in touchesBegan
}
func handleLongPress(recognizer: UIGestureRecognizer) {
print("1 --------> longPress Called.... ", recognizer.state.rawValue, gameState)
if gameState == .Play {
//do stuff
//duck Hero
} else {
//switch gameState
}
}
Это функция, которая обрабатывает касания/нажатия:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
/* Called when a touch begins */
for touch in touches {
let location = touch.locationInNode(self)
//do stuff
switch gameState {
case .MainMenu:
break
... //more states
}
}
super.touchesBegan(touches, withEvent: event)
}
Если я перемещаю все из touchesBegans
в tapRecogniser
(пустая функция выше), мне нужно реализовать и это, чтобы преобразовать координаты местоположения касания:
func handleTap(recognizer: UIGestureRecognizer) {
let location = convertPointFromView(CGPoint(x: recognizer.locationInView(nil).x, y: recognizer.locationInView(nil).y))
print("Converted Coords: ", location)
//then do all touchesBegan stuff
}
Я пробовал оба, но последний кажется очень медленным и вялым. Может быть, я забыл реализовать что-то, что рекомендуется?
Кажется, мой жест longPress не всегда вызывается, может ли быть какой-то конфликт между ними?
touchesBegan
иif timer > longPressValue duck, else jump?
Или у SpriteKit разные жесты тапа? - person Reanimation   schedule 17.12.2015