2015-07-29 6 views
0

При попытке перетащить SKSpriteNodes с помощью функции touchesMoved код, который позволяет мне перетаскивать спрайты, не работает, когда я пытаюсь их пронести.Как использовать UISwipeGestureRecognizer вместо touchsMoved с Swift и SpriteKit?

Это то, что у меня есть:

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. Я просмотрел множество источников и не видел ответа на такой вопрос.

Может кто-нибудь, пожалуйста, дайте мне совет о том, как перетаскивать SKSpriteNodes с помощью UISwipeGestureRecognizer?

ответ

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

+0

Есть ли способ, чтобы перетащить спрайты? Код, который вы показываете, как перетаскивать просмотры – BroFist5

+0

Это намного лучше. большое спасибо –

0

Sprite двигаться с одной стороны на другую сторону: -

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

Надеется, что это поможет вам