在Apple的样本冒险游戏中,他们像这样在场景中添加精灵:
场景文件具有此功能:
- (void)addNode:(SKNode *)node atWorldLayer:(APAWorldLayer)layer {
SKNode *layerNode = self.layers[layer];
[layerNode addChild:node];
}
扩展SKSpriteNode的类实现:
APAMultiplayerLayeredCharacterScene *scene = (id)[self scene];
[scene addNode:emitter atWorldLayer:APAWorldLayerAboveCharacter];
这对我来说有点脏,因为它基本上是从课堂内部回到当前场景的全局函数调用。这是可以接受的做法,还有其他方法吗?想到的想法是:
1)将场景引用传递给类并存储它是本地成员变量
2)通知/事件监听器设置
由于我是Objective-C的新手,我很想知道我是否缺少或忽略了这种代码流的理想解决方案或方法。谢谢!
答案 0 :(得分:1)
从任何给定节点添加其他节点的场景时,您需要引用要添加节点的父对象。
这可能是
这些都可以通过节点属性访问。
找到孩子的一种简洁方法是使用childNodeWithName:
[[self.scene childNodeWithName:@"childLayerNodeIWantToAddStuffTo"] addChild:node];