简体   繁体   中英

How do I use UISwipeGestureRecognizer instead of touchesMoved with Swift and SpriteKit?

While trying to drag and drop SKSpriteNodes with the touchesMoved function, the code that lets me drag sprites does not work when I try to swipe them.

This is what I have:

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
        }
    }
}

This is what I'm trying to do:

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)
}

But when I try to swipe the sprite, I receive a SIGABRT error. I've looked at lots of sources, and have not seen an answer to a question like this.

Would someone please give me some advice on how to drag SKSpriteNodes using UISwipeGestureRecognizer?

use this function to swipe a view in 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

Sprite move from one side to another side:-

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]))
}

Hope it will help you

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM