2016-01-23 79 views
0

我正在嘗試執行overriden touchesMoved func以使SKSpriteNodes能夠被用戶移動。但是,我必須非常緩慢地移動節點,以便在拖動時跟隨觸摸點。此外,背景中有三個SKSpriteNode(您將看到我明確設置爲.userInteractionEnabled = false),並且這些節點偶爾會響應觸摸。任何幫助將不勝感激。讓我知道你是否還有其他需要的代碼。touchesMoved無法正常工作

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     var positionInScene = CGPoint(x: 375.0, y: 400.0) //sets a default position 

     titleLabel.userInteractionEnabled = false 
     drawingBoard.userInteractionEnabled = false 
     sideBar.userInteractionEnabled = false 

     for touch in touches { 
      positionInScene = touch.locationInNode(self) 

      if self.nodeAtPoint(positionInScene) is SKSpriteNode { 
       if (self.nodeAtPoint(positionInScene)).name == movableNodeName { //movableNodeName is the name assigned to all SKSpriteNodes that should be draggable 
//I know this might be a strange way of doing it 
        (self.nodeAtPoint(touch.previousLocationInNode(self))).position = positionInScene 
       } 
      } 
     } 
    } 

回答

1

我已經設法通過只設置不應移回它們原來是什麼,只要它是移動節點的座標,來解決這個問題。這似乎工作,因爲我還沒有能夠再次在測試中複製錯誤。如果有人能提出更好的解決方案,我很樂意聽到它。

0

您的問題是您正在使用touch.locationInNode(self),其中self是您的SKSpriteNode。這意味着您的觸摸移動代碼只會響應您的SKSpriteNode內部正在進行的操作。你需要做的是根據你想要應用這個邏輯的方式,使用精靈的父母或場景。