我正在使用Swift制作一个SpriteKit游戏。我想知道在手势方面哪种方式最好?
目前,我有一个
你知道,轻触会按下按钮并使英雄跳跃。长按会让英雄躲避。
由于某些原因,我的长按函数并不总是被调用(有时你可以按10次并且停止被调用(不被识别),其他时候可能是5次,它会变化),这导致我昨天花了一整天尝试新事物和调查,从而引出了这个问题。
是使用
我已经将所有东西从
这是如何设置
这是处理触摸/点击的功能函数:
目前,我有一个
override func touchesBegan
处理所有的轻触操作和一个UILongPressGestureRecognizer
处理长按操作。你知道,轻触会按下按钮并使英雄跳跃。长按会让英雄躲避。
由于某些原因,我的长按函数并不总是被调用(有时你可以按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
}
我尝试了两种方法,但后者似乎非常缓慢和迟钝。也许我忘记实现一些推荐的东西了?
我的长按手势似乎并不总是被调用,这之间可能存在冲突吗?
touchesBegan
中加入一个计时器,然后根据if timer > longPressValue duck, else jump?
的逻辑判断是否跳跃?或者SpriteKit有不同的tapGestures吗? - Reanimation