您好我正在尝试使用字符串从SKAction数组中选择一个SKAction
。
我有一个包含所有游戏可能的SKActions的数组。然后,我需要提取与所选节点的可能操作名称(字符串)匹配的特定操作。
所以,例如,我可能有
allActions = [runCentre, runLeft, runRight]
这些是SKActions,
possibleActions = [runCentre, runRight]
是从与给定节点类型相关的属性列表访问的字符串。
如何在allActions中查询allActions数组中的值?我知道迭代两个数组但不是我实际尝试访问的机制。我能以某种方式给SKActions一个字符串属性吗?我试过了
runStraight.setValue("runStraight", forKey: "name")
但是会引发NSUnknownKeyException
。有更好的方法吗?
非常感谢任何帮助!
答案 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]! }