我正在使用SKNode
方法在SKScene
中搜索childNodeWithName:
。要设置名称,我使用NSManagedObjectID
的URI字符串表示,如下所示:
[[managedObjectID URIRepresentation] absoluteString];
这给出了一个节点名称:
的x coredata:// 0856426F-EA66-4D28-A88A-FF49225F69B6 /对象/ P4
但是,childNodeWithName:
方法返回nil。在调试器中检查时,该节点以及其他两个节点明显存在:
<__NSArrayI 0x9933eb0>(
<SKSpriteNode> name:'(null)' texture:['nil'] position:{160, 284} size:{320, 568} rotation:0.00,
<SKSpriteNode> name:'x-coredata://0856426F-EA66-4D28-A88A-FF49225F69B6/Object/p4' texture:['nil'] position:{31, 537} size:{50, 50} rotation:0.00,
<SKSpriteNode> name:'x-coredata://0856426F-EA66-4D28-A88A-FF49225F69B6/Object/p1' texture:['nil'] position:{217, 416} size:{50, 50} rotation:0.00
)
为了强化这一点,如果我将节点名称设置为&#34; testingName&#34;,那么节点将按预期返回。
这让我相信Sprite Kit对我用过的名字并不感兴趣。是否有人知道命名限制,或者可能知道为什么URL格式会在这里产生问题?
感谢。
答案 0 :(得分:3)
通过here回答@kylefuller。
来自Apple:
搜索使用常见的正则表达式语义。
&#34; //&#34; - 当放置在搜索字符串的开头时,这指定搜索应该从根节点开始并在整个节点树上递归执行。它在搜索字符串中的任何其他位置都不合法。
答案 1 :(得分:2)
我想我会在这个问题上添加一些内容,因为我浪费了几个小时。
我的项目有一个Sprite工具包场景图如下:
根据Apple的例子, SKScene-> SKNode(myWorld)->SKNode(camera)
。但是在使用时
var cameraNode = self.childNodeWithName("camera")
返回的节点总是为零。 Apple文档未提及Andy's answer所述的'//'。似乎函数childNodeWithName
将仅搜索指定节点的子节点(在本例中为场景)。我一发现这篇文章,就把这行改为
var cameraNode = self.childNodeWithName("//camera")
它现在可以找到camera
节点,无论它在场景图中的级别如何。