[英]SpriteKit childNodeWithName can't find existing node
我在SKScene中有以下代码:
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)
}
我看到“存在!” 在日志中,因此在children数组中有一个具有此名称的节点,但是tempNode为nil 。 self.childNodeWithName("//" + name)
调用也返回nil 。
这是在Swift中完成此操作的方法...希望对您有所帮助!
var mySprite: SKSpriteNode = childNodeWithName("mySprite") as SKSpriteNode
我使用Swift 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)")
}
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.