【问题标题】:Swift trying to cross check array of SKActions with array of stringsSwift 试图用字符串数组交叉检查 SKActions 数组
【发布时间】:2017-04-05 17:10:20
【问题描述】:

您好,我正在尝试使用字符串从 SKAction 的数组中选择 SKAction

我有一个数组,其中包含我游戏中所有可能的 SKAction。然后,我需要提取与选定节点的可能操作名称(字符串)匹配的特定操作。

所以,例如,我可能有

allActions = [runCentre, runLeft, runRight] 

这些是SKActions,并且

possibleActions = [runCentre, runRight] 

它们是从与给定节点类型相关的属性列表中访问的字符串。

如何在 allActions 数组中查询 possibleActions 中的值?我知道遍历这两个数组的机制,但不知道我实际尝试访问的内容。我可以以某种方式给 SKActions 一个字符串属性吗?我试过了

runStraight.setValue("runStraight", forKey: "name")  

但这会引发NSUnknownKeyException。有没有更好的方法来做到这一点?

任何帮助将不胜感激!

【问题讨论】:

    标签: arrays swift sprite-kit skaction


    【解决方案1】:

    我真的不太明白你想要达到什么目的。 不幸的是,SKAction 没有 tagname 属性作为标识。 您可以创建一个字典来将字符串键关联到SKAction

    假设您有以下操作:

    let runCentre = SKAction.move(to: CGPoint(x:100.0,y:100.0), duration: 1.0)
    let runLeft = SKAction.move(to: CGPoint(x:0.0,y:100.0), duration: 1.0)
    let runRight = SKAction.move(to: CGPoint(x:200.0,y:100.0), duration: 1.0)
    let runTop = SKAction.move(to: CGPoint(x:100.0,y:200.0), duration: 1.0)
    let runBottom = SKAction.move(to: CGPoint(x:100.0,y:0.0), duration: 1.0)
    // create a dictionary (key:string, value:SKAction)
    let allActions = ["runCentre":runCentre,"runLeft":runLeft,"runRight": runRight,"runTop":runTop,"runBottom":runBottom]
    

    您可以使用以下方法构建字典:

    let allActions = ["runCentre":runCentre,"runLeft":runLeft,"runRight": runRight,"runTop":runTop,"runBottom":runBottom]
    

    现在假设您有一个具有以下可能操作的节点:

    let runDiag = SKAction.move(to: CGPoint(x:0.0,y:200.0), duration: 1.0)
    let possibleActions = ["runCentre":runCentre, "runRight": runRight, "runDiag":runDiag]
    

    要知道allActions 中有哪些possibleActions(依靠相等的键),您可以这样做:

    let availableActions = allActions.filter { possibleActions.keys.contains($0.key) }
    

    【讨论】:

      【解决方案2】:

      将所有操作的列表保存在 [String:SKAction] 类型的字典中。

      let allActions = [
          "runCenter": runCenter,
          "runLeft": runLeft,
          // etc
      ]
      

      如果您在String 数组中有一个节点可能的操作,您可以使用(平面)Map。

      let possibleActions = ["runCenter", "idle"]
      
      let possibleSKActions = possibleActions.flatMap { allActions[$0] }
      
      // or if we are sure the action names will always have a value
      let possibleSKActions = possibleActions.map { allActions[$0]! }
      

      【讨论】:

        猜你喜欢
        • 2015-06-01
        • 2017-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-17
        • 2018-08-19
        • 1970-01-01
        • 2016-11-20
        相关资源
        最近更新 更多