2014-07-20 69 views
0

我只是想讓用戶在屏幕上拖放某些精靈。我看到的答案是檢查精靈的名稱(如下所示)。必須有更好的方法來做到這一點。感謝您的任何意見。使用swift拖放不使用硬編碼名稱的精靈

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

    var nodeTouched = SKNode() 
    for touch: AnyObject in touches { 
     let location = touch.locationInNode(self) 

     nodeTouched = self.nodeAtPoint(location) 

     if(nodeTouched.name? == "character") { 
      character.position=location 
      currentNodeTouched = nodeTouched 
     } else { 
      currentNodeTouched.name = "" 
     } 
    } 
} 

override func touchesEnded(touches: NSSet, withEvent event: UIEvent) { 
    for touch: AnyObject in touches { 
     let location = touch.locationInNode(self) 
     var nodeTouched = SKNode() 
     nodeTouched = self.nodeAtPoint(location) 

     if(currentNodeTouched.name == "character") { 
      character.position = location 
     } 
    } 
} 

override func touchesMoved(touches: NSSet, withEvent event: UIEvent) { 
    for touch: AnyObject in touches { 
     let location = touch.locationInNode(self) 

     var nodeTouched = SKNode() 
     nodeTouched = self.nodeAtPoint(location) 

     if(currentNodeTouched.name == "character") { 
      character.position = location 
     } 
    } 
} 

回答

2

由於您只想拖放特定的精靈,必須有一種方法來識別它們。這可以是任何可以用來區分節點的東西。以下是關於在這種情況下可以使用什麼的一些建議。

答案中的代碼是在Objective-C中,希望你可以將它翻譯成Swift。

name財產

正如你所說,這是確定的精靈是否可以拖動與否的最常用方式。

userData財產

這是SKNode相關的屬性,它可以讓你設置你想要的任何自定義數據。你可以閱讀關於它here

[node.userData setValue:@(YES) forKey:@"draggable"]; //Setting the value 

if ([[node.userData valueForKey:@"draggable"] boolValue]) //Checking the value 

子類

您還可以創建一個自定義的類,它可以處理deag拖放功能上它自己或實施BOOL作爲可以在觸摸代表進行檢查的屬性。

類名

在某些情況下,你可能只希望特定類的節點被拖動。

if ([node isKindOfClass:[CustomNode class]]) 

if ([(NSStringFromClass([node class]) isEqualToString:@"CustomNode"])