2014-08-30 104 views
1

我有這樣的代碼在SKScene:「存在」SpriteKit childNodeWithName無法找到現有節點

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

    var touch: AnyObject = touches.anyObject() 
    var point = getPoint(touch.locationInNode(self)) 
    var name = NSStringFromCGPoint(point) 

    for children in self.children { 

     if (children as SKSpriteNode).name == name { 

      println("exist!") 
     } 
    } 
    var tempNode = self.childNodeWithName(name) 
} 

我見在日誌中,所以在兒童陣列中存在具有此名稱的節點,但是tempNodeself.childNodeWithName("//" + name)電話也會返回

回答

8

下面是如何在Swift中完成此操作...希望這有助於!

var mySprite: SKSpriteNode = childNodeWithName("mySprite") as SKSpriteNode 
+0

childNodeWithName總是致命錯誤而失敗:意外發現零而展開的可選值 – 2016-03-29 13:48:22

+0

這可能是由於一些事情。名稱字符串中可能存在拼寫錯誤,或者您要查找的節點可能尚未初始化,或者在調用childNodeWithName時可能已被刪除。可選的鏈接是防止這種情況的好方法。試試這個:'if let mySprite = childNodeWithName(「mySprite」){ //對節點 做些什麼}' – 2016-03-30 02:39:22

0

我發現使用雨燕2.2,也許是錯誤..你不能使用NSStringFromCGPoint和childNodeWithName不清洗從括號中的字符串這陌生感:

使用這個小方法:

func removeBraces(s:String)->String { 
    return s.stringByTrimmingCharactersInSet(NSCharacterSet.init(charactersInString: "{}")) 
} 

當你把你的SKSpriteNode比如做:

... 
mySpriteNode.name = removeBraces(NSStringFromCGPoint(mySpriteNode.position)) 
... 

並檢索它爲您的情況:

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

    var touch: AnyObject = touches.anyObject() 
    var point = getPoint(touch.locationInNode(self)) 
    var name = removeBraces(NSStringFromCGPoint(point)) 
    if let child = self.childNodeWithName(name) { 
     print("I've found: \(child)") 
    } 
    ... 
} 
相關問題