2017-04-19 2 views
0

Hallo Leute!Wie kann ich Instanzmethoden zu meinem Objekt verbinden

Schrieb-Code, der Spieler für mich generieren:

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") 
    } 
} 

Wie es mit SKSpriteNode generiert wurde befestige ich kann nicht Methode fireEnemies. Und jetzt kann ich es nicht von SKSpriteNode zu PlayerPlane werfen.

Klar, ich kann alles andere Art und Weise mit PlayerPlane initialisers machen, aber kann ich etwas vermissen, und es gibt andere intelligentere Lösungen für Verfahren Anbringen fireEmenies auf Instanzen von PlayerPlane?

Antwort

0

Wenn Sie eine PlayerPlane als Klasse benötigen, dann können Sie es auf diese Weise machen (als PlayerPlane eine Unterklasse von SKSpriteNode ist, dass Sie es initializers verwenden):

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") 
    } 
} 

Sie können aber auch ein Protokoll verwenden, und schreiben eine Erweiterung für SKSpriteNode was sehr praktisch ist, wenn Sie andere Objekte machen wollen/structs nehmen PlayerPlane Funktionalität:

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 
    } 

} 

Schließlich, wenn Sie „andere“ Art und Weise befestigen 01.230.542 wollenFunktionalität zu Ihrem PlayerPlane können Sie auch eine Erweiterung für ein Protokoll schreiben:

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") 
    } 
} 
Verwandte Themen