Swift试图用字符串数组交叉检查SKActions数组

时间:2017-04-05 17:10:20

标签: arrays swift sprite-kit skaction

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

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

所以,例如,我可能有

allActions = [runCentre, runLeft, runRight] 

这些是SKActions,

possibleActions = [runCentre, runRight] 

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

如何在allActions中查询allActions数组中的值?我知道迭代两个数组但不是我实际尝试访问的机制。我能以某种方式给SKActions一个字符串属性吗?我试过了

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

但是会引发NSUnknownKeyException。有更好的方法吗?

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

我真的不太了解你想要实现的目标。 很遗憾,SKAction没有标记名称属性作为标识。 您可以创建字典以将字符串键与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]

要了解possibleActions中哪些allActions可用(依赖于相同的键),您可以这样做:

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

答案 1 :(得分:1)

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

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

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

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]! }