使用Swift的SpriteKit的UISwipeGestureRecognizer

时间:2014-08-14 20:43:10

标签: ios swift sprite-kit ios8 uiswipegesturerecognizer

我正在快速创建一个涉及用字母制作单词的游戏。这些字母是单独的SKSpriteNodes,位于“架子”上,这是一个SKSpriteNode。要删除“架子”中的字母,我试图引入向上滑动。不幸的是,我遇到了被信件拾取的滑动问题。架子似乎吸收它,有时甚至是SKScene。我已禁用货架节点上的用户交互。

这是我的设置:

swipeRecognizer = UISwipeGestureRecognizer(target: self, action: Selector("move:"))
swipeRecognizer.direction = UISwipeGestureRecognizerDirection.Up
self.view.addGestureRecognizer(swipeRecognizer)

我将swipeRecognizer添加到视图中,然后在move方法中,我有以下内容:

func move(swipe:UISwipeGestureRecognizer){        
    if(swipe.state == UIGestureRecognizerState.Ended && swipe.numberOfTouches() == 1){

        var touchLocation = swipe.locationInView(swipe.view)
        touchLocation = self.convertPointFromView(touchLocation)            
        var sprite = self.nodeAtPoint(touchLocation)

        if sprite is Letter{
            let letter = sprite as Letter
            if(gameManager.letterOnShelf(letter)){
                gameManager.letterFlicked(letter)
            }
        }
    }
}

只有在有时它会将精灵识别为一个字母,80%的时间精灵都是架子而且我无法弄清楚正确的工作方式是什么......

非常感谢任何帮助。

干杯!

1 个答案:

答案 0 :(得分:1)

我建议:

  1. 使用UILongPressGestureRecognizer minimumPressDuration设置为0。
  2. 当手势处于UIGestureRecognizerStateBegan状态时,查看您的触摸精灵是否为Letter,并保存对该图块的引用。
  3. UIGestureRecognizerStateEnded状态下,您应该能够看到手势结束的位置(或者轨迹等),然后从之前移动存储引用的图块。