从SKSpriteNode引用当前的SKScene

时间:2014-04-10 12:44:56

标签: ios sprite-kit

在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的新手,我很想知道我是否缺少或忽略了这种代码流的理想解决方案或方法。谢谢!

1 个答案:

答案 0 :(得分:1)

从任何给定节点添加其他节点的场景时,您需要引用要添加节点的父对象。

这可能是

  • 场景
  • 当前节点的父级
  • 节点本身
  • 任何这些节点的某个孩子

这些都可以通过节点属性访问。

找到孩子的一种简洁方法是使用childNodeWithName:

[[self.scene childNodeWithName:@"childLayerNodeIWantToAddStuffTo"] addChild:node];