如何在Swift和SpriteKit中使用UISwipeGestureRecognizer而不是touchesMoved?

时间:2015-07-29 23:06:40

标签: swift sprite-kit uiswipegesturerecognizer touchesmoved

尝试使用touchesMoved函数拖放SKSpriteNodes时,当我尝试滑动时,允许我拖动精灵的代码不起作用。

这就是我所拥有的:

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?){
    for touch: AnyObject in touches{
        let location = touch.locationInNode(self)
        let touchedNode = self.nodeAtPoint(location)
        let MySprite = SKSpriteNode(imageNamed: "image.png")

        if touchedNode == MySprite{
            MySprite.position = location
        }
    }
}

这就是我想要做的事情:

func swipedRight(sender:UISwipeGestureRecognizer){
    let MySprite = SKSpriteNode(imageNamed: "image.png")
    let touch = UITouch()
    let location = touch.locationInNode(self)
    let touchedNode = self.nodeAtPoint(location)

    if touchedNode == MySprite{
        MySprite.position = location
    }
}

override func didMoveToView(view: SKView) {
    let swipeRight:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: Selector("swipedRight"))
    swipeRight.direction = .Right
    view.addGestureRecognizer(swipeRight)
}

但是当我尝试滑动精灵时,我收到一个SIGABRT错误。我看过很多来源,并没有看到这样一个问题的答案。

有人请给我一些关于如何使用UISwipeGestureRecognizer拖动SKSpriteNodes的建议吗?

2 个答案:

答案 0 :(得分:0)

使用此函数在Spritekit中滑动视图。

    var leftSwipe = UISwipeGestureRecognizer(target: self, action: Selector("handleSwipes:"))
    var rightSwipe = UISwipeGestureRecognizer(target: self, action: Selector("handleSwipes:"))

func handleSwipes(sender:UISwipeGestureRecognizer ) {
    if (sender.direction == .Right) {
        if screenIndex > 0  && disableFlag == 0{
            disableFlag         =   1
            let action = SKAction.moveTo(CGPointMake(scrollBg.position.x + frame.size.width, scrollBg.position.y), duration: 0.10)
            let resetAction    =   SKAction.runBlock {
                self.disableFlag         =   0
            }
            scrollBg.runAction(SKAction.sequence([action,resetAction]))
            screenIndex--
            var suiteStatus = NSUserDefaults.standardUserDefaults().integerForKey(itemIDArr[screenIndex] as NSString)
            if suiteStatus == 2 {
                playEffectSound(suitSoundArray[screenIndex] as NSString)
            }
        }
    }
    if (sender.direction ==  .Left){
        if screenIndex < itemIDArr.count-1  && disableFlag == 0{
            disableFlag         =   1
            let action = SKAction.moveTo(CGPointMake(scrollBg.position.x - frame.size.width, scrollBg.position.y), duration: 0.10)
            let resetAction    =   SKAction.runBlock {
                self.disableFlag         =   0
            }
            scrollBg.runAction(SKAction.sequence([action,resetAction]))
            screenIndex++
            var suiteStatus = NSUserDefaults.standardUserDefaults().integerForKey(itemIDArr[screenIndex] as NSString)
                if suiteStatus == 2 {
                    playEffectSound(suitSoundArray[screenIndex] as NSString)
            }
        }
    }
 }

https://stackoverflow.com/users/5171280/brofist5

答案 1 :(得分:0)

  

精灵从一侧移动到另一侧: -

func moveGooses() {
    let path = UIBezierPath()
    path.moveToPoint(CGPoint(x:self.parentScene.frame.width*0.99, y: self.parentScene.frame.height*0.90)) path.addCurveToPoint(CGPoint( x:self.parentScene.frame.width*0.01, y: self.parentScene.frame.height*0.90), controlPoint1: CGPoint(x: self.parentScene.frame.width*0.01, y:self.parentScene.frame.height*0.90) , controlPoint2: CGPoint(x: self.parentScene.frame.width*0.01, y:self.parentScene.frame.height*0.90))
    let anim = SKAction.followPath(path.CGPath, asOffset: false, orientToPath: false, duration: 3.0)

    let seq = SKAction.sequence([anim])
    let removeAction = SKAction.runBlock{
        let myGameScene =   self.parentScene as GameScene
        self.removeFromParent()
    }
    self.runAction(SKAction.sequence([seq,removeAction]))
}

希望它能帮到你