Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在sks文件中的Xcode action editor上获取所有动作名称;SpriteKit action“;_Ios_Xcode_Swift_Sprite Kit_Skscene - Fatal编程技术网

Ios 如何在sks文件中的Xcode action editor上获取所有动作名称;SpriteKit action“;

Ios 如何在sks文件中的Xcode action editor上获取所有动作名称;SpriteKit action“;,ios,xcode,swift,sprite-kit,skscene,Ios,Xcode,Swift,Sprite Kit,Skscene,我有一个SpriteKit动作文件,里面有一些动作 要使用一个动作,我使用: let action = SKAction(named: "Shake") 可以直接使用MyActions.sks文件中的名称吗? 类似于: let actions = SKScene(fileNamed: "MyActions.sks")` let shakeAction = actions.listOfAction.Shake //this is my guess

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

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

let action = SKAction(named: "Shake")
可以直接使用MyActions.sks文件中的名称吗? 类似于:

let actions = SKScene(fileNamed: "MyActions.sks")`  
let shakeAction = actions.listOfAction.Shake //this is my guess
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) 
如果打印场景文件:

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

let actions = SKScene(fileNamed: "MyActions.sks")`  
let shakeAction = actions.listOfAction.Shake //this is my guess
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) 
可选({
“_info”={
“_previewScenePath”=“pipompiere/GameScene.sks”;
};
行动={
PlayerIdle1=“”;
PlayerMovetoHouse 0=“”;
PlayerMovetoHouse 1=“”;
PlayerMovetoHouse 2=“”;
旋转360=“”;
摇一摇“”;
桑沙克=”;
水射流=”;
};
})
(lldb)
可以像数组一样执行操作吗


谢谢

AFAIK,您可以从
.sks
文件中获取操作字典。这里,我有一个
MyCustomActions.sks
文件,其中包含一个actionPulse

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
从这里,您可以从
操作
字典中实现自己的
结构

要获取所有操作的名称

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

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

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


谢谢,我会尽力的,但是你每次都必须记住动作的位置?这与带有动作名称的字符串结构是一样的?我不太理解你的问题。如果SKNode中有一个操作(非运行操作),则该节点始终具有“操作”KVO。我提到了struct,以防您以后想要绑定它们以正确地获得dot。我很高兴地想到这可能会起作用,但遗憾的是它没有起作用。我仍然没有找到一种方法来从时间线中获取行动的参考。我希望能够在场景的时间轴上找到一种“到达某个时间点”的方法。