【问题标题】:move SpriteKit nodes dynamically to an array将 SpriteKit 节点动态移动到数组
【发布时间】:2016-01-19 21:09:39
【问题描述】:

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

加载关卡时,我想枚举所有标题为“平台*”的节点并将它们放入一个数组中。 现在我使用 enumerateChildNodesWithName 但我没有让块中的代码正常工作。 这是我目前所拥有的:

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

它会打印出以下错误消息:

CUICatalog:无效请求:请求子类型但未指定 成语

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

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

有人帮忙吗?

提前谢谢...

【问题讨论】:

    标签: arrays swift sprite-kit


    【解决方案1】:

    如果您在场景编辑器中将平台添加到 SKNode 容器,它们会自动添加到容器的子数组中(按添加顺序)。然后,您可以使用

    访问平台
        if let platforms = childNodeWithName("platforms") {
            for platform in platforms.children {
                print ("\(platform.name)")
            }
        }
    

    要将平台添加到场景编辑器中的SKNode,请将SKNode(列为空)添加到编辑器,适当地设置SKNode的名称(例如,平台),然后设置通过在编辑器中设置平台的父属性来设置每个平台的父级(见下图)。

    【讨论】:

      【解决方案2】:

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

      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]"
      

      【讨论】:

      • 我也想过像提议的那样将节点添加到场景中,但我想在场景编辑器中添加节点。因为这些节点从一个级别更改为另一个级别,我想直观地放置这些节点而不是使用代码。任何想法如何将节点以这种方式放入数组中?
      • @boehmatron 就像 Epsilon 指出的那样,当节点添加到父节点时,它会自动添加到父节点的子数组中。所以我想如果你的所有节点都有相同的父节点,这就是你问题的答案。如果没有,您可以执行 advanced search 或者,逐个枚举每个父级(再次,就像来自 Epsilon 的回答)。
      • 感谢您的意见,这似乎工作得很好:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多