【问题标题】:How to get all actions name on Xcode action editor in sks file "SpriteKit action"如何在 sks 文件“SpriteKit 动作”中获取 Xcode 动作编辑器上的所有动作名称
【发布时间】:2016-05-20 18:03:19
【问题描述】:

我有一个 SpriteKit 动作文件,里面有一些动作。

要使用一个动作,我使用:

let action = SKAction(named: "Shake")

取而代之可以直接使用 MyActions.sks 文件中的名称吗? 类似:

let actions = SKScene(fileNamed: "MyActions.sks")`  
let shakeAction = actions.listOfAction.Shake //this is my guess

如果我打印场景文件:

let actions = SKScene(fileNamed: "MyActions.sks")
print(actions)

输出为:

Optional({
    "_info" =     {
        "_previewScenePath" = "PippiPompiere/GameScene.sks";
    };
    actions =     {
        PlayerIdle1 = "<SKGroup: 0x79e60ec0>";
        PlayerMoveToHouse0 = "<SKGroup: 0x7b1ea010>";
        PlayerMoveToHouse1 = "<SKGroup: 0x7b052cd0>";
        PlayerMoveToHouse2 = "<SKGroup: 0x7b1ebbd0>";
        Rotate360 = "<SKGroup: 0x79e61710>";
        Shake = "<SKGroup: 0x79e60a10>";
        SunShake = "<SKGroup: 0x7b1e8620>";
        WaterJet = "<SKGroup: 0x7b1e8ce0>";
    };
})
(lldb) 

可以有像数组这样的动作吗?

谢谢

【问题讨论】:

    标签: ios xcode swift sprite-kit skscene


    【解决方案1】:

    AFAIK,您可以从 .sks 文件中获取 actions 字典。在这里,我有一个带有 Pulse 动作的 MyCustomActions.sks 文件。

    guard
        let node = SKNode(fileNamed: "MyCustomActions"),
        let actions = node.value(forKey: "actions") as? [String:SKAction],
        let pulse = actions["Pulse"]
    else { return }
    
    print(pulse.duration)  // 0.6 seconds
    

    从这里,您可以从actions 字典中实现自己的struct

    要获取所有动作的名称,

    let actionNames = actions.map { $0.key }  // ["Pulse"]
    

    【讨论】:

    • 谢谢,我试试,但每次都要记住动作的位置?带有动作名称的字符串结构也一样?
    • 我不太明白你的问题。如果 SKNode 中有一个动作(不是运行动作),该节点总是有“动作”KVO。我提到结构是为了以防您以后想绑定它们以正确获取点。
    • 我很高兴认为这可能有效,但遗憾的是它没有。我仍然没有找到一种方法来从时间线中获取动作参考。我希望能够有办法在场景的时间线上“到达某个时间点”。
    【解决方案2】:

    最简单的方法是创建一个动作文件(从 XCode 模板选择器或使用 GameScene.sks 文件中的“createAction -> NewFile”选项)。

    动作文件的名称无关紧要;您在此类文件中创建的任何操作都可以通过 SKAction(named:) 获得

     if let shake = SKAction(named: "Shake") {
                    myNode.run(shake)
                }
    

    【讨论】:

      猜你喜欢
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      • 1970-01-01
      • 2016-02-29
      • 1970-01-01
      相关资源
      最近更新 更多