* Nicht wirklich alles.
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.
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:
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 kompiliertDie 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:
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 ()
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.
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.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.
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.
Bibliothek importieren.Ein
.var o: Eins = Neues Eins ();
Bibliothek importieren. *;
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
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.