32397


いつもお世話になっております。

複数あるアクションの中から特定のアクションを取得し、sequenceで順次runさせたいと考えております。

[code]

    let actionSequence = SKAction.sequence([
        pN.animate(named: "walk"),
        pN.animate(named: "wait"),
        pN.animate(named: "turn"),
        pN.animate(named: "walk"),
    ])
    pN.run(actionSequence)
    
[/code]

戻り値をprint(type(of: xxx))で調べましたら、SKAnimateと表示されました。  
ですが戻り値をSKAnimate型にすると

[code]

    use of undeclared type 'SKAnimate'
    
[/code]

と表示されます。  
戻り値をSKActionやAnyObject型で試しましたが、アニメーションできませんでした。  
試しに、sequenceせずに1つのアクションで検証してみましたがダメでした。

[code]

    pN.run(pN.animate(named: "walk") as! SKAction, withKey: "walk")
    
[/code]

SKAnimateについて調べましたが、解決策に辿り着くことができませんでした。  
どうかご教授ご鞭撻のほどよろしくお願い致します。


CC BY-SA 3.0
2017-02-05T07:39:27.677
32394
2017-02-05T11:40:53.527
20142
question
swift swift2 swift3
戻り値SKAnimateをrunさせたい


ご返信ありがとうございます。  
結果から申しますと凡ミスしており解決致しました。

ソースが大きかった為、当方が悩んでいる箇所を抜粋し簡略化し記載させて頂きました。  
ですが、簡略化し過ぎ逆にご回答者様を悩ませてしまいました。  
申し訳ございません。

print(type(of: xxx))は、print(type(of: 戻り値))を表現したものになります。

[code]

    func animate(named: String) -> SKAction! {  // 戻り値をSKAnimateにしたらuse of undeclared type 'SKAnimate'
        let a = SKAction.animate(with: xxx as! [SKTexture], timePerFrame: 0.033)
        print(type(of: a))  // SKAnimate
        return a
    }
    
[/code]

SKAnimateの戻り値はSKActionでしたので、上記戻り値はSKActionで解決致しました。  
<https://developer.apple.com/reference/spritekit/skaction/1417828-animate>

「アニメーションできませんでした、ダメでした」は、コンパイルは通りましたが、戻り値のSKActionを再生することができなかった次第です。

[code]

    pN.run(pN.animate(named: "walk") as! SKAction, withKey: "walk")  // アニメーションしてくれなかった
    
[/code]

凡ミス箇所を記載させて頂きたいと思います。

[code]

    class A {
        private var aP: String
        init() {
            self.aP = "a"
        }
        func aM() -> String {
            return self.aP
        }
    }
    class B {
        //private var node: A
        var node: A  // pubに致しました
        init() {
            node = A()
        }
        func animate(named: String) -> SKAction! {
            let a = SKAction.animate(with: xxx as! [SKTexture], timePerFrame: 0.033)
            return a
        }
    }
    
    let pN = B()
    let a = pN.animate(named: "walk")
    //pN.run(a)       // ご質問はここにあたります(コンパイルは通るけどアニメーションされない)
    print(pN.node.aM())
    pN.node.run(a)  // 凡ミスにより解決しアニメーションさせることができました
    
[/code]

nに対しrunを実行させようとしておりました。  
簡単ではございますが当方の凡ミスでございました。

以上よろしくお願い致します。


CC BY-SA 3.0
2017-02-05T11:40:53.527
32397
2017-02-05T11:40:53.527
20142
32394
answer