2017-04-19 25 views
0

こんにちは!それは私がメソッドのfireEnemiesを添付することはできませんSKSpriteNodeで生成されたとしてインスタンスメソッドをオブジェクトにどのように接続できますか

class PlayerPlane: SKSpriteNode { 


    static func populatePlayerPlane() -> SKSpriteNode { 
     let playerPlane = SKSpriteNode(imageNamed: "airplane_1_14") 
     playerPlane.position = CGPoint(x: 200, y: 200) 
     playerPlane.zPosition = 50 
     return playerPlane 
    } 

    func fireEnemies() { 
     print("Attack") 
    } 
} 

は私のためにプレーヤーを生成するコードを書きました。今度はSKSpriteNodeからPlayerPlaneにキャストできません。

私はPlayerPlane初期化子を使用して、すべて他の方法を作ることができますが、私は何かを欠場し、他のよりスマートなソリューションがPlayerPlaneのインスタンスにメソッドfireEmeniesを取り付けるためにそこにあるかもしれ確かに?

答えて

0

あなたはクラスとしてPlayerPlaneを必要とするなら、あなたはこの方法(PlayerPlaneはあなたが使用することができますSKSpriteNodeのサブクラスであるとして、それは初期化子です)、それを行うことができます。

class PlayerPlane: SKSpriteNode { 

    static func populatePlayerPlane() -> PlayerPlane { 
     let playerPlane = PlayerPlane(imageNamed: "airplane_1_14") 
     playerPlane.position = CGPoint(x: 200, y: 200) 
     playerPlane.zPosition = 50 
     return playerPlane 
    } 

    func fireEnemies() { 
     print("Attack") 
    } 
} 

しかし、あなたはまた、プロトコルを使用して書くことができますあなたは、「その他」の道を添付したいとき、最後に

protocol PlayerPlane { 

    func fireEnemies() 
} 

extension SKSpriteNode : PlayerPlane { 

    func fireEnemies() { 
     print("Attack") 
    } 

} 

extension SKSpriteNode { 

    static func populatePlayerPlane() -> SKSpriteNode { 
     let playerPlane = SKSpriteNode(imageNamed: "airplane_1_14") 
     playerPlane.position = CGPoint(x: 200, y: 200) 
     playerPlane.zPosition = 50 
     return playerPlane 
    } 

} 

:あなたが他のオブジェクトを作成したい場合に便利ですSKSpriteNodeの拡張子は、/構造体はPlayerPlane機能を採用しますの機能をPlayerPlaneに追加するには、プロトコルの拡張子を書くこともできます。

class PlayerPlane: SKSpriteNode { 

    static func populatePlayerPlane() -> PlayerPlane { 
     let playerPlane = PlayerPlane(imageNamed: "airplane_1_14") 
     playerPlane.position = CGPoint(x: 200, y: 200) 
     playerPlane.zPosition = 50 
     return playerPlane 
    } 
} 


protocol FireEnemies { 
    func fireEnemies() 
} 

extension PlayerPlane : FireEnemies { 
    func fireEnemies() { 
     print("Attack") 
    } 
} 
関連する問題