【发布时间】:2016-01-11 19:26:27
【问题描述】:
我在 SpriteKit 场景中同时使用了 UISwipeGestureRecognizer 和 touchesBegan。 UISwipeGestureRecogniser 在didMoveToView() 发起:
let swipeRight:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: Selector("swipedRight:"))
swipeRight.direction = .Right
view.addGestureRecognizer(swipeRight)
let swipeLeft:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: Selector("swipedLeft:"))
swipeLeft.direction = .Left
view.addGestureRecognizer(swipeLeft)
touchesBegan() 用于在节点被触摸时转换到另一个场景。节点由它们的名称标识,在某些情况下由它们名称的前缀标识。
if (node.name?.hasPrefix("enemy") != nil) {
let transition = SKTransition.crossFadeWithDuration(StandardSettings.SceneManager.transitionDuration)
let enemyScene = EnemyScene(size: self.frame.size)
enemyScene.scaleMode = .AspectFill
view?.presentScene(enemyScene, transition: transition)
}
最后,还有 swipedRight() 和 swipedLeft() 的函数。这些将 SKShapeNode 从左向右移动(或相反)。
func swipedRight(sender:UISwipeGestureRecognizer) {
shapeNode.runAction(SKAction.moveByX(UIScreen.mainScreen().bounds.size.width * 0.5, y: 0, duration: 5.0))
}
这一切都很好,除非在滑动移动期间触摸由其前缀标识的节点。当没有与节点接触时,shapeNode 会按预期在屏幕上移动。当有联系时,到新场景的转换代码也被调用。似乎只有在敌人节点通过其名称前缀识别时才会发生这种情况。通过与字符串进行全名比较识别的节点似乎没有这个问题。有没有办法在代码执行滑动触发方法时禁用touchesBegan()?
【问题讨论】:
标签: sprite-kit swift2 uigesturerecognizer touchesbegan