2014-08-30 101 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)") 
    } 
    ... 
} 
相关问题