2015-02-10 99 views
1

我希望能夠用手指移動精靈。我首先有一個可變的手指是否在子畫面或不:如何用手指移動精靈?

var isFingerOnGlow = false 

然後我有touchesBegan函數其中I改變上述變量的值如果用戶觸摸精靈:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
    var touch = touches.anyObject() as UITouch! 
    var touchLocation = touch.locationInNode(self) 

    if let body = physicsWorld.bodyAtPoint(touchLocation) { 
     if body.node!.name == GlowCategoryName { 
      println("Began touch on hero") 
      isFingerOnGlow = true 
     } 
    } 
} 

有時候它可以工作,控制檯顯示「開始接觸英雄」,有時不會。有沒有更好的方法來編碼第一部分?

那麼我想知道如果我touchesMoved下面的代碼是有效的:

override func touchesMoved(touches: NSSet, withEvent event: UIEvent) { 
    if isFingerOnGlow{ 
     var touch = touches.anyObject() as UITouch! 
     var touchLocation = touch.locationInNode(self) 
     var previousLocation = touch.previousLocationInNode(self) 

     var glow = SKSpriteNode(imageNamed: GlowCategoryName) 

     // Calculate new position along x for glow 
     var glowX = glow.position.x + (touchLocation.x - previousLocation.x) 
     var glowY = glow.position.y + (touchLocation.y - previousLocation.y) 

     // Limit x so that glow won't leave screen to left or right 
     glowX = max(glowX, glow.size.width/2) 
     glowX = min(glowX, size.width - glow.size.width/2) 

     glow.position = CGPointMake(glowX, glowY) 
    } 
} 

...

override func touchesEnded(touches: NSSet, withEvent event: UIEvent) { 
    isFingerOnGlow = false 
} 
+0

發光應該做什麼?在'touchesMoved'中? – rakeshbs 2015-02-10 17:20:52

+0

獲取應該移動的節點。我在http://www.raywenderlich.com/84341/create-breakout-game-sprite-kit-swift上找到了代碼,然後對其進行了一些修改。但它有時只是起作用。 – ecoguy 2015-02-10 17:24:52

回答

2

您可以修改這樣的功能來跟蹤觸摸。

var isFingerOnGlow = false 
var touchedGlowNode : SKNode! 


override func touchesBegan(touches: NSSet, withEvent event:UIEvent) { 
    var touch = touches.anyObject() as UITouch! 
    var touchLocation = touch.locationInNode(self) 

    let body = self.nodeAtPoint(touchLocation) 
    if body.name == GlowCategoryName { 
     println("Began touch on hero") 
     touchedGlowNode = body 
     isFingerOnGlow = true 
    } 

} 

override func touchesMoved(touches: NSSet, withEvent event: UIEvent) { 

    if isFingerOnGlow{ 

     let touch = touches.anyObject() as UITouch! 
     let touchLocation = touch.locationInNode(self) 
     let previousLocation = touch.previousLocationInNode(self) 
     let distanceX = touchLocation.x - previousLocation.x 
     let distanceY = touchLocation.y - previousLocation.y 

     touchedGlowNode.position = CGPointMake(touchedGlowNode.position.x + distanceX, 
      touchedGlowNode.position.y + distanceY) 
    } 
} 

override func touchesEnded(touches: NSSet, withEvent event: UIEvent) { 
    isFingerOnGlow = false 
}