将SpriteKit节点动态移动到数组

时间:2016-01-19 21:09:39

标签: arrays swift sprite-kit

我正在开发一个GameScene,我在场景编辑器中设置了一些节点,因为我想将它们直观地放在关卡中。 节点的所有名称都来自" platform1"到" platform5"。根据级别,可以有更多或更少的平台节点。

当加载关卡时,我想枚举所有节点,标题为" platform *"并将它们放入一个数组中。 现在我使用enumerateChildNodesWithName但是我没有得到块中的代码正常工作。 这就是我到目前为止所做的:

    enumerateChildNodesWithName("//platform*", usingBlock: {node, _ in
        if let platform = node as? PlatformNode {
            print(platform.name)
        }
    })

并打印出以下错误消息:

  

CUICatalog:无效请求:请求子类型而不指定   成语

但是平台名称没有打印出来。 任何想法如何实现这一目标?

我的下一个目标是将每个平台都放到一个数组中,这样我就可以通过数组访问每个平台的属性。

有人伸出援助之手吗?

提前致谢...

2 个答案:

答案 0 :(得分:1)

如果将平台添加到场景编辑器中的<%= current_user.name %>容器中,它们将自动添加到容器的子阵列中(按添加顺序添加)。然后,您可以使用

访问平台
SKNode

要在场景编辑器中将平台添加到 if let platforms = childNodeWithName("platforms") { for platform in platforms.children { print ("\(platform.name)") } } ,请将SKNode(列为空)添加到编辑器中,正确设置SKNode的名称(例如,平台),并通过在编辑器中设置平台的父属性来设置每个平台的父级(见下图)。

enter image description here

答案 1 :(得分:0)

您的搜索字符串不正确。你可以这样做:

class PlatformNode:SKSpriteNode{

}

class GameScene: SKScene {

override func didMoveToView(view: SKView) {


    let p1 = PlatformNode()
    p1.name = "platform1"

    let p2 = PlatformNode()
    p2.name = "platform2"

    let p3 = PlatformNode()
    p3.name = "platform3"

    let p4 = PlatformNode()
    p4.name = "platform4"

    let p5 = PlatformNode()
    p5.name = "platform5"


    addChild(p1)
    addChild(p2)
    addChild(p3)
    addChild(p4)
    addChild(p5)


    enumerateChildNodesWithName("platform[1-3]", usingBlock: {node, _ in
        if let platform = node as? PlatformNode {
            print(platform.name)
        }
    })  
}

}

这将为您提供名为platform1platform2platform3的所有平台。要检索名为platform4和platform5的节点,您需要将搜索字符串更改为:

"platform[1-5]"