2016-11-11 6 views
0

Ich habe versucht, den Code, den ich oft verwende, zu verbessern, und habe mich gefragt, ob es einen einfachen Weg dafür gibt.AS3 - Objekte dynamisch initialisieren

Ich habe eine Navigationsklasse, die die Objekte vor dem Konstruktor definiert (private var exampleScreen: ExampleScreen;).

Basierend auf einer String-Abhängigkeitsinjektion für eine ChangeScreenTo-Funktion (destinationScreen: String), ist es möglich, den definierten Bildschirm zu greifen und ihn dynamisch zu initialisieren (exampleScreen = new ExampleScreen();)? Wie auch immer, hat jemand bessere Vorschläge als diese oder meine aktuelle Lösung einer Switch-Anweisung?

Beispielcode:

package{ 
    public class ScreenController extends MovieClip { 
     private var currentScreen: DisplayObject; 
     //SCREENS 
     private var exampleScreen1:ExampleScreen1; 
     private var exampleScreen2:ExampleScreen2; 
     ... 
     public function ScreenController() { 
      ... 
     } 
     public function ChangeScreenTo(desinationScreenName: String) { 
      //REMOVE CURRENT SCREEN 
      if (currentScreen != null) { 
       removeChild(currentScreen); 
       currentScreen = null; 
      } 
      switch (destinationScreenName) { 
       case "exampleScreen1": 
        exampleScreen1 = new ExampleScreen1(); 
        break; 
       case "exampleScreen2": 
        exampleScreen2 = new ExampleScreen2(); 
        break; 
       ... 
      } 
      mcDestinationScreen = this[(destinationScreenName)]; 
      addChild(mcDestinationScreen); 
      currentScreen = mcDestinationScreen; 
     } 
    } 
} 
+0

Vielleicht hat jemand kann Ihnen helfen, aber das ist zu abstrakt für mich. Veröffentlichen Sie formatierten Code in einem Block, damit ich Ihre aktuelle Implementierung sehen kann. –

+0

Sie müssen also eine bestimmte Klasse instanziieren, je nach dem Wert der Zeichenfolge? Alles, was mit dem Ausblenden anderer (zuvor geöffneter) Bildschirme zu tun hat? – www0z0k

+0

Code zu Frage hinzugefügt. –

Antwort

0

Kann sein, das ist besser:

public function ChangeScreenTo(desinationScreenName: String) { 
     //REMOVE CURRENT SCREEN 
     if (currentScreen != null) { 
      removeChild(currentScreen); 
      currentScreen = null; 
     } 
     switch (destinationScreenName) { 
      case "exampleScreen1": 
       currentScreen = exampleScreen1 = new ExampleScreen1(); 
       break; 
      case "exampleScreen2": 
       currentScreen = exampleScreen2 = new ExampleScreen2(); 
       break; 
      ... 
     } 
     addChild(currentScreen); 
    } 
Verwandte Themen