2016-08-09 40 views
0

Also experimentiere ich mit dem Erstellen von benutzerdefinierten Klassen und dann mit ihren Funktionen, aber ich kann nicht einmal die einfachsten Dinge tun.Benutzerdefinierte Klasse Funktion funktioniert nicht auf Szene

Dies ist meine kundenspezifische Klasse:

import SpriteKit 

class BlockScene: SKScene { 

    func createBlock(){ 
     print("Block Created") 
    } 
} 

Dies ist der Code in meinem MainScene

import SpriteKit 

class GameScene: SKScene { 

    let variable = BlockScene(fileNamed: "Block") 

    override func didMoveToView(view: SKView) { 
     variable?.createBlock() 
    } 

    override func update(currentTime: CFTimeInterval) { 
     /* Called before each frame is rendered */ 
    } 
} 

Wenn die Hauptszene geladen ist es nicht meine Funktion createBlock execute(). Was mache ich hier falsch?

+0

Bist Du sicher, dass die didMoveToView Funktion ist gerufen werden? – Carter

+0

Ja, ich bin, weil ich eine print() in der didMoveToView-Funktion ausprobiert und es auf der Konsole ausgedruckt hat @Carter – Charles

+0

@Charles Die Sache ist, dass Sie in die falsche Richtung gehen. Um ein Sprite zu erstellen, müssen Sie nur eine Instanzmethode für eine aktuelle Szene oder sogar eine statische Methode auf dem GameScene erstellen, die ein neues Sprite erstellt und zurückgibt. Diese Variable namens * variable * wird nicht benötigt, wenn sie nur dazu dient, eine Methode zur Verfügung zu stellen, die ein bestimmtes Sprite erzeugt. – Whirlwind

Antwort

1

Problem

des Lauf mir sieht es aus wie Sie keine Datei mit dem Namen „Block“, die Sie Flächenbelastung von haben. Wenn eine SKScene initialisiert wird, die die fileNamed Methode verwendet, gibt es ein optionales zurück, falls die Datei nicht vorhanden ist. In diesem Fall existiert "Block" nicht, also ist die Variable null und ruft createBlock() in Ihrer didMoveToView() Methode nicht auf.

Lösung

Sie können entweder den „Block“ Datei erstellen, die Sie benötigen, oder einfach nur die Standard-Initialisierer für BlockScene nennen, wie unten:

import SpriteKit 

class BlockScene: SKScene { 

    func createBlock(){ 
     print("Block Created") 
    } 
} 

class GameScene: SKScene { 

    let variable: BlockScene = BlockScene() 

    override func didMoveToView(view: SKView) { 
     self.variable.createBlock() 
    } 

    override func update(currentTime: CFTimeInterval) { 
     /* Called before each frame is rendered */ 
    } 
} 
+1

Da das OP keine Ahnung hat, was er macht, würde ich auch darauf hinweisen, dass die Blockdatei eine Sprite Kit Scene-Datei namens Block.sks sein sollte – Knight0fDragon