SKNode无法找到childNodeWithName:

时间:2014-04-04 23:23:50

标签: ios sprite-kit

我正在使用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格式会在这里产生问题?

感谢。

2 个答案:

答案 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节点,无论它在场景图中的级别如何。