Alles, was Sie möglicherweise über Importanweisungen wissen möchten *

* Nicht wirklich alles.


Importe sind erforderlich **

In den AS2-Tagen könnte man herumkommen, um ein schreiben zu müssen einführen Anweisung durch einfaches Verwenden des vollständig qualifizierten Klassennamens innerhalb des Klassenhauptteils (z. B. flash.display.Sprite im Gegensatz zu nur Sprite). Sie können den vollständig qualifizierten Klassennamen jedoch verwenden, wenn Sie Ihren Code schreiben, einführen Anweisungen für jede Klasse sind erforderlich in AS3.

Es ist also nicht unbedingt nötig, vollständig qualifizierte Klassennamen zu schreiben, es sei denn, Sie verwenden zufällig zwei Klassen, die den gleichen Kurznamen innerhalb derselben Klasse haben - vielleicht, wenn Sie Flashs verwenden Kamera Klasse zusammen mit einer 3D-Bibliothek Kamera Klasse.


** Sofern sich die Klasse nicht im selben Paket befindet

Die Ausnahme von der vorherigen Regel ist, wenn die Klasse, die Sie verwenden, und die Klasse, die Sie schreiben, beides sind im gleichen Paket. Alle Klassen in einem Paket stehen einander implizit ohne ein einführen Aussage.

Es ist immer noch keine schlechte Idee, das zu schreiben einführen Aussage trotzdem, weil:


Importanweisungen sind selbstdokumentierender Code

Indem Sie alle Ihre Importe auflisten, erstellen Sie eine Art Manifest darüber, auf welche anderen Klassen Ihre Klasse angewiesen ist, um ihre Arbeit zu erledigen. Es mag wie eine banale Sache erscheinen, aber diese Informationen können durchaus nützlich sein. Betrachten Sie die folgende Klasse ***:

 Paket com.activetuts import com.activetuts.SuperTrace; import com.activetuts.ActiveTween; public class QuickTip öffentliche Funktion QuickTip var tracer: SuperTrace = new SuperTrace (); tracer.log ("Schnelltipp"); var tween: ActiveTween = neues ActiveTween (); tween.go (); 

*** Hoffentlich ist es offensichtlich, dass diese Klasse illustrativ und nicht funktional ist.

Wenn du das dann verwendest Kurzer Tipp In dieser Klasse stellt Flash automatisch sicher, dass die SuperTrace und ActiveTween Klassen werden auch in die resultierende SWF-Datei kompiliert, da Sie sie verwendet haben Kurzer Tipp, und Kurzer Tipp erfordert diese Klassen.

Einfach genug, aber jetzt realistischere Klassen, die Dutzende anderer Klassen verwenden. Wenn Sie wissen möchten, welche Klassen verwendet werden, werfen Sie einen Blick auf die einführen Abschnitt kann Ihnen eine anständige Idee geben. Es ist nicht erschöpfend und sogar ein wenig irreführend, aber Sie werden schwer jemanden finden, der denkt, dass selbstdokumentierender Code eine schlechte Sache ist.


Blitz Klassen müssen importiert werden, werden aber nicht kompiliert

Die Vorstellung, dass die Verwendung vieler Klassen zwangsläufig bedeutet, dass die SWF-Dateigröße zunimmt, ist ein Missverständnis. Normalerweise stimmt das. Aber jede Klasse, die mit beginnt Blitz ist eine, die vom Flash Player bereitgestellt wird, und hat keinen Einfluss auf die Größe Ihrer SWF-Datei. Der Bytecode für, sagen wir, Sprite ist im Flash Player enthalten, und Sie registrieren lediglich die Tatsache, dass Sie ein Sprite verwenden, und bündeln diesen Bytecode nicht in Ihrer SWF-Datei. Das ist eine Art Sinn für den Flash Player.

Ich erwarte nicht, dass du mir das glaubst. Ich erwarte, dass Sie etwas ungläubig sind und einen Beweis verlangen. Ich begrüße es, dass Sie sich selbst beweisen, indem Sie die folgenden Schritte ausführen:

  1. Ein ... kreieren neue FLA und assoziiert Dokumentenklasse.
  2. Schreiben Sie in der Dokumentenklasse das Minimum, das Sie benötigen, um sie tatsächlich als Dokumentenklasse zu definieren:

     package import flash.display.Sprite; public class Document erweitert Sprite public function Document () 
  3. Öffne die Einstellungen veröffentlichen durch Drücken von Option-Shift-F12 / Alt-Shift-F12 (oder indem Sie Datei> Einstellungen für Veröffentlichungen wählen).
  4. Klicke auf das "Blitz"tab.
  5. In dem "Erweitert"Abschnitt, überprüfen Sie die"Generieren Sie einen Größenbericht" Möglichkeit.
  6. Auch in der "SWF-Einstellungen"Abschnitt, überprüfen Sie die"SWC exportieren"Option, eine unÜberprüf den "XMP-Metadaten einschließen"Option (diese letzte Option entfernt eine Reihe von Metadaten aus der SWF-Datei, die die Größe der SWF-Datei aufbläht und den Größenbericht, den wir betrachten werden, durcheinander bringt).
  7. Drücken Sie Strg / Befehlstaste bis Testen Sie den Film.
  8. Drücken Sie Strg / Befehlstaste-B, um die zu öffnen Bandbreiten-Profiler (Auch verfügbar unter Ansicht> Bandbreitenprofiler während der SWF-Ansicht)
  9. Beachten Sie die Anzahl der Bytes dieser SWF-Datei 354, Ihre Laufleistung kann variieren, aber in diesem Stadion liegen. Notieren Sie sich die Bytes und nicht die Kilobytes. Erinnere dich an diese Nummer.
  10. Schließen Sie die SWF-Datei.
  11. Bearbeiten Sie Ihre Dokumentenklasse eine Menge verwenden Blitz Klassen. Zum Beispiel:

     Paket import flash.display. *; import flash.media. *; import flash.net. *; importiere flash.text. *; öffentliche Klasse Document erweitert MovieClip öffentliche Funktion Document () var l: Loader = new Loader (); l.load (neue URLRequest ("someasset.swf"))); var tf: TextField = neues TextField (); var format: TextFormat = neues TextFormat ("Verdana"); format.align = TextFormatAlign.CENTER; tf.defaultTextFormat = format; var v: Video = neues Video (); var s: Sound = neuer Sound (); var channel: SoundChannel = s.play (); 

    Wir verwenden einige Klassen, die selbst noch mehr Klassen enthalten. Alle diese Klassen sind jedoch Blitz Klassen.

  12. Testen Sie den Film nochmal. Der Bandbreiten-Profiler sollte beim letzten Mal noch geöffnet sein. Wenn nicht, öffnen Sie es erneut.
  13. Beachten Sie die Größe des SWF: Ich melde 596 Bytes mit dem obigen Code, eine Zunahme von 242 Bytes. Das ist nicht viel, wenn man bedenkt, dass ich benutze Filmausschnitt (was eine ganze Reihe weiterer Klassen umfasst), Lader, URLRequest, Textfeld, Textformat, TextFormatAlign, Video, Klingen, und SoundChannel. Das ist viel Funktionalität für 242 Bytes.
  14. Im Ausgabefenster sehen Sie etwa Folgendes (wenn Sie den obigen Code wörtlich verwendet haben, werden auch Ton- und Ladefehler angezeigt, diese sind jedoch nicht wichtig):

     flash-test.swf Filmbericht ---------------------------- Frame # Frame Bytes Gesamtanzahl der Bytes Szene ------- - ---------- ----------- ----- 1 598 598 Szene 1 (AS 3.0-Klassen-Exportrahmen) Szenenform Bytes Textbytes ActionScript-Bytes ----- - ----------- ---------- ------------------ Szene 1 0 0 546 ActionScript-Bytes Speicherort - ----------------- -------- 546 Szene 1: Bild 1: Dokument

Dieser Test sollte zeigen, dass, obwohl wir viele von Flash bereitgestellte Klassen verwendet haben, die resultierende Größe unserer SWF-Datei vergleichsweise klein ist. Der Beweis wird jedoch mit dem Größenbericht geliefert, in dem keine Einträge für die integrierten Klassen angezeigt werden. Wir sehen unser Dokumentieren Klasse, aber keine anderen Klassen, und diese Klasse ist dafür verantwortlich alles ActionScript-Bytes.

Wenn dies kein ausreichender Beweis für Sie ist, können Sie das Experiment erweitern. Sie könnten sogar noch mehr von Flash bereitgestellte Klassen hinzufügen, während Sie die Vergrößerung der SWF-Größe als nur eine Frage von Bytes messen. Sie können eigene Klassen integrieren und sicherstellen, dass sie in der Klassenliste angezeigt werden und die Größe der SWF-Datei auf offensichtliche Weise beeinflussen. Zum Beispiel habe ich dies einfach erstellt Prüfung Klasse:

 package öffentliche Klasse Test öffentliche Funktion Test () trace ("TEST"); 

Einschließlich dieser einzelnen 7-Zeilen-Klasse, die selbst keine anderen Klassen verwendet, wurde meine Test-SWF-Datei mit einem Test versehen 717 Bytes, eine Zunahme von 121 Bytes. Dieser Anstieg ist die Hälfte des Anstiegs, den wir beim Hinzufügen von allen gesehen haben Blitz Klassen; Das Verhältnis von Byte zu Funktionalität sollte anzeigen, dass das Blitz Klassen werden nicht in Ihre SWF-Datei kompiliert.

Beachten Sie auch, dass im Größenbericht für die Zusatzklasse ein zusätzlicher Eintrag angezeigt wird. etwas wie das:

 flash-test.swf Filmbericht ---------------------------- Frame # Frame Bytes Gesamtanzahl der Bytes Szene ------- - ---------- ----------- ----- 1 719 719 Szene 1 (AS 3.0-Klassen-Exportrahmen) Szenenform Bytes Textbytes ActionScript-Bytes ----- - ----------- ---------- ------------------ Szene 1 0 0 673 ActionScript-Bytes Speicherort - ----------------- -------- 179 Szene 1: Bild 1: Test 494 Szene 1: Bild 1: Dokument

Die Moral der Geschichte: Fühlen Sie sich frei, so viele zu verwenden Blitz Unterricht wie du willst ****. Sie haben keinen Einfluss auf die Größe Ihrer SWF-Datei (obwohl der Code das ist Verwendet diese Klassen werden natürlich)

**** Beachten Sie, dass dies Komponenten und Flex-Klassen sind nicht bereitgestellt vom Flash Player. Diese Klassen scheinen integriert zu sein, aber wenn das Paket nicht mit beginnt Blitz, dann wird es nicht vom Player bereitgestellt.


Wildcard-Importe sind nicht ineffizient

Es tut mir leid für das doppelte Negativ *****, aber dies ist ein weiteres weit verbreitetes Missverständnis, das ich gerne aufklären würde.

Zuerst eine schnelle Definition. EIN Platzhalter importieren sieht so aus:

 import flash.display. *;

Damit sind alle Klassen innerhalb der flash.display Paket. Dies ist eine Kurzform im Vergleich zu (zum Beispiel):

 import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.BlendMode; import flash.display.Graphics; import flash.display.Sprite;

Nun, das Missverständnis. Wenn ich sage, "das macht alle Klassen verfügbar", dann NICHT meinen, dass jeden Klasse in diesem Paket wird automatisch in Ihre SWF-Datei kompiliert. Ich meine, jede Klasse in diesem Paket steht Ihnen in Kurzform zur Verfügung, wenn Sie die Klasse schreiben. Im vorigen Beispiel wäre ich also frei, dies zu schreiben:

 var sp: Sprite = neues Sprite; var g: Graphics = Grafikbilder; g.beginFill (0); g.drawRect (0, 0, 100, 100); sp.blendMode = BlendMode.MULTIPLY;

In diesem Code werden Sprite, Graphics und BlendMode verwendet, die alle im flash.display-Paket enthalten sind und alle importiert werden müssen. Beide Ansätze haben das gleiche Ergebnis. Fühlen Sie sich frei, Wildcard-Importe zu verwenden.

Wieder ein einfaches Experiment für diejenigen, die einen Nachweis benötigen. Für dieses Experiment brauchen wir nicht-Blitz Klassen. Sie benötigen externe Klassen, entweder solche, die Sie geschrieben haben, oder etwas wie Papervision3D oder TweenMax. Ich werde diese Pakete nicht herunterladen und installieren, aber für meinen Beispielcode verwende ich ein einfaches Paket von vier Klassen, die für diesen Zweck erstellt wurden. Sie finden sie zusammen mit den Testdateien im Download-Paket im Ordner "Wildcard-Import". Die Klassen sind im Bibliothek Paket.

  1. Ein ... kreieren neue FLA, und assoziiert Dokumentenklasse.
  2. In deinem Code, eine einzelne Klasse importieren. Zum Beispiel:
    Bibliothek importieren.Ein.
  3. Und sicher sein benutze es, wie mit
    var o: Eins = Neues Eins ();
  4. Testen Sie den Film (Drücken Sie Befehl-Return / Control-Enter, oder gehe zu Steuerung> Film testen).
  5. Öffnen Sie den Bandbreiten-Profiler bei laufender SWF (drücken Befehl-B / Steuerung-B oder gehe zu Ansicht> Bandbreite-Profiler)
  6. Beachten Sie die Größe der SWF (wieder in Bytes, nicht in Kilobytes).
  7. Schließen Sie die SWF-Datei
  8. Bearbeiten Sie Ihre Dokumentenklasse so, dass die Import verwendet einen Platzhalter stattdessen. Zum Beispiel:
    Bibliothek importieren. *;
  9. Testen Sie den Film nochmal.
  10. Beachten Sie die Größe der SWF. Es sollte sein identisch Wie letztes Mal.
  11. Sie können auch den Größenbericht aktivieren (vergessen Sie nicht, die SWC-Option zu aktivieren und die XMP-Option zu deaktivieren), um zu sehen, welche Klassen kompiliert werden.

Dies sollte darauf hinweisen, dass es aussieht, als würden wir importieren alles Aus dem Paket stellen wir eigentlich nur die Klassen zusammen, die wir tatsächlich verwenden.

***** Nein, bin ich nicht


Eine Import-Anweisung allein kompiliert die Klasse nicht

Das heißt, in diesem folgenden hypothetischen Beispiel:

 package import SuperTrace; importiere ActiveTween; öffentliche Klasse QuickTip öffentliche Funktion QuickTip () 

Das SuperTrace und ActiveTween Klassen werden importiert. Aber das sind sie nie gebraucht innerhalb der Klasse. Der Flash-Compiler ist normalerweise klug genug, um dies herauszufinden und zu bestimmen, dass diese beiden Klassen nicht für das kompiliert werden müssen Kurzer Tipp Klasse.

Natürlich, wenn eine andere Klasse das verwendet SuperTrace Klasse, dann wird es kompiliert. Der Punkt ist, dass der Compiler ziemlich gut darin ist, nicht benötigte Klassen in Ihre SWF-Datei aufzunehmen.

Sie können dies beweisen, indem Sie einen Test einrichten, der den vorherigen Tests ähnelt: Vergleichen Sie die Byte- und Größenberichte von zwei SWF-Dateien, die bis auf die Verwendung einer importierten Klasse identisch sind. Sie können ein solches Beispiel sehen, indem Sie die im Quellcode enthaltenen Projekte "import-without-use" und "import-with-use" vergleichen.

Wenn Sie aus irgendeinem Grund sicherstellen müssen, dass die SuperTrace und ActiveTween Klassen kompilieren, auch wenn Sie sie nicht in dieser Klasse verwenden, können Sie dies erzwingen, indem Sie sie einfach im Klassenkörper referenzieren. Zum Beispiel:

 Paket com.activetuts import com.activetuts.SuperTrace; import com.activetuts.ActiveTween; öffentliche Klasse QuickTip öffentliche Funktion QuickTip SuperTrace; ActiveTween; 

Das reicht, um den Compiler dazu zu bringen, diese als benötigte Klassen anzuzeigen, obwohl die Zeilen beim Ausführen des Codes nicht viel ausrichten.