* Pas vraiment tout.
Dans les jours AS2, vous pourriez éviter de devoir écrire un importation
déclaration en utilisant simplement le nom de classe qualifié complet dans le corps de la classe (tel que flash.display.Sprite
par opposition à juste Lutin
). Bien que vous puissiez utiliser le nom de classe complet lorsque vous écrivez votre code, importation
les déclarations pour chaque classe sont Champs obligatoires en AS3.
Il n’est donc pas vraiment nécessaire d’écrire des noms de classe pleinement qualifiés, sauf si vous utilisez deux classes qui partagent le même nom abrégé dans la même classe - peut-être si vous utilisez Flash Caméra
classe avec une bibliothèque 3D Caméra
classe.
L'exception à la règle précédente est si la classe que vous utilisez et la classe que vous écrivez sont toutes les deux dans le même paquet. Toutes les classes d’un paquet sont implicitement disponibles les unes aux autres, sans importation
déclaration.
Ce n’est toujours pas une mauvaise idée d’écrire le importation
déclaration quand même, parce que:
En répertoriant toutes vos importations, vous créez une sorte de manifeste des autres classes sur lesquelles votre classe s'appuie pour effectuer son travail. Cela peut sembler une chose triviale, mais cette information peut en réalité être très utile. Considérez la classe suivante ***:
package com.activetuts import com.activetuts.SuperTrace; import com.activetuts.ActiveTween; Classe publique QuickTip fonction publique QuickTip var tracer: SuperTrace = new SuperTrace (); tracer.log ("astuce"); var tween: ActiveTween = new ActiveTween (); tween.go ();
*** Espérons qu'il est évident que cette classe est illustrative et non fonctionnelle.
Si vous utilisez ensuite cette Conseil rapide
classe, Flash s'assurera automatiquement que le SuperTrace
et ActiveTween
les classes sont également compilées dans le fichier SWF résultant, car vous avez utilisé Conseil rapide
, et Conseil rapide
nécessite ces cours.
C'est assez simple, mais considérons maintenant des classes plus réalistes qui utilisent des dizaines d'autres classes. Si vous avez besoin de savoir quelles classes sont utilisées, jetez un coup d’œil à la importation
section peut vous donner une idée décente. Ce n'est pas exhaustif, et c'est même un peu trompeur, mais vous aurez du mal à trouver quelqu'un qui pense que le code auto-documenté est une mauvaise chose.
flash
Les classes doivent être importées mais ne sont pas compiléesIl y a une idée fausse commune autour de l'idée qu'utiliser beaucoup de classes signifie nécessairement que la taille du fichier de votre SWF augmentera. Normalement c'est vrai. Mais toute classe qui commence par flash
est fourni par Flash Player et n'aura aucun effet sur la taille de votre fichier SWF. Le code d'octet pour, disons, Lutin
est contenu dans Flash Player et vous enregistrez simplement le fait que vous utiliserez un Sprite, sans regrouper ce code d'octet dans votre fichier SWF. C’est un peu l’intérêt d’avoir Flash Player.
Je ne m'attends pas à ce que vous me croyiez là-dessus. Je m'attends à ce que vous soyez légèrement incrédule et exigiez des preuves. Je vous invite à vous le prouver en suivant ces étapes:
Dans la classe de document, écrivez le minimum nécessaire pour la définir en tant que classe de document:
package import flash.display.Sprite; Classe publique Document Etend Sprite Fonction publique Document ()
Modifier votre classe de document utiliser un tas de flash
Des classes. Par exemple:
package import flash.display. *; import flash.media. *; importer flash.net. *; importer flash.text. *; Classe publique Document étend MovieClip fonction publique Document () variable l: Loader = new Loader (); l.load (new URLRequest ("someasset.swf")); var tf: TextField = new TextField (); format var: TextFormat = new TextFormat ("Verdana"); format.align = TextFormatAlign.CENTER; tf.defaultTextFormat = format; var v: vidéo = nouvelle vidéo (); var s: Son = nouveau Son (); var channel: SoundChannel = s.play ();
Nous utilisons pas mal de classes, qui en incorporent encore plus. Toutes ces classes, cependant, sont flash
Des classes.
MovieClip
(qui étend tout un tas d'autres classes), Chargeur
, URLRequest
, Champ de texte
, TextFormat
, TextFormatAlign
, Vidéo
, Du son
, et SoundChannel
. C'est beaucoup de fonctionnalités pour 242 octets.Dans le panneau de sortie, vous verrez quelque chose comme ce qui suit (si vous utilisez le code ci-dessus, vous verrez également des erreurs de son et de chargement, mais ce ne sont pas importantes):
flash-test.swf Rapport de séquence ----------------------------- Image # Octet Octets Total Octets Scène ------- - ---------- ----------- ----- 1 598 598 Scène 1 (cadre d'exportation des classes AS 3.0) Scène Forme Octets Texte Octets ActionScript Octets ----- - ----------- ---------- ------------------ Scène 1 0 0 546 Octets ActionScript Emplacement - ----------------- -------- 546 Scène 1: Cadre 1: Document
Ce test devrait illustrer le fait que, même si nous avons utilisé de nombreuses classes fournies par Flash, la taille de notre fichier SWF est relativement petite. La preuve est fournie avec le rapport de taille, dans lequel nous ne voyons aucune entrée pour aucune des classes intégrées. Nous voyons notre Document
classe, mais pas d'autres classes, et qu'une classe est responsable de tout ActionScript octets.
Si cela ne vous suffit pas, n'hésitez pas à développer l'expérience. Vous pouvez ajouter encore plus de classes fournies par Flash, tout en mesurant l’augmentation de la taille du fichier SWF en tant qu’objects. Vous pouvez incorporer vos propres classes et vous assurer qu'elles apparaissent dans la liste des classes, tout en affectant la taille du fichier SWF de manière plus évidente. Par exemple, j'ai créé ce simple Tester
classe:
package classe publique Test fonction publique Test () trace ("TEST");
Y compris cette classe unique de 7 lignes, qui n’utilise aucune autre classe, a forcé mon test SWF à 717 octets, une augmentation de 121 octets. Cette augmentation correspond à la moitié de l’augmentation constatée lors de l’ajout de tous ces facteurs. flash
Des classes; le rapport octet / fonctionnalité devrait indiquer que le flash
les classes ne sont pas compilées dans votre fichier SWF.
Notez également que vous verrez une entrée supplémentaire dans le rapport de taille pour la classe supplémentaire; quelque chose comme ça:
flash-test.swf Rapport de séquence ----------------------------- Image # Octet Octets Total Octets Scène ------- - ---------- ----------- ----- 1 719 719 Scène 1 (cadre d'exportation des classes AS 3.0) Scène Forme Octets Texte Octets ActionScript Octets ----- - ----------- ---------- ------------------ Scène 1 0 0 673 Octets ActionScript Emplacement - ----------------- -------- 179 Scène 1: Cadre 1: Test 494 Scène 1: Cadre 1: Document
La morale de l'histoire: n'hésitez pas à en utiliser autant flash
classes comme vous voulez ****. Ils n’affecteront pas la taille de votre fichier SWF (bien que le code les usages ces cours seront, bien sûr)
**** N'oubliez pas que les composants et les classes Flex sont ne pas fourni par Flash Player. Ces classes semblent être intégrées, mais si le paquet ne commence pas par flash
, alors ce n'est pas fourni par le joueur.
Je suis désolé pour le double négatif *****, mais ceci est une autre idée fausse commune que je voudrais éclaircir.
Tout d'abord, une définition rapide. UNE importation générique est celui qui ressemble à ceci:
import flash.display. *;
Cela rend disponible toutes les classes de la flash.display
paquet. C'est un raccourci comparé à (par exemple):
import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.BlendMode; import flash.display.Graphics; import flash.display.Sprite;
Maintenant, l'idée fausse. Quand je dis, "cela rend disponible toutes les classes", je le fais NE PAS veut dire que chaque La classe de ce paquet est automatiquement compilée dans votre fichier SWF. Je veux dire que toutes les classes de ce paquet sont disponibles sous forme abrégée au fur et à mesure que vous écrivez la classe. Donc, dans l'exemple précédent, je serais libre d'écrire ceci:
var sp: Sprite = new Sprite; var g: Graphics = sp.graphics; g.beginFill (0); g.drawRect (0, 0, 100, 100); sp.blendMode = BlendMode.MULTIPLY;
Ce code utilise Sprite, Graphics et BlendMode, qui figurent tous dans le package flash.display et qui doivent tous être importés. Les deux approches ont le même résultat. N'hésitez pas à utiliser des importations de joker.
Encore une fois, une expérience simple pour ceux qui ont besoin de preuves. Pour cette expérience, nous avons besoin de non-flash
Des classes. Vous aurez besoin de classes externes disponibles, celles que vous avez écrites ou quelque chose comme Papervision3D ou TweenMax. Je ne me lancerai pas dans le téléchargement et l'installation de ces packages, mais pour les besoins de mon exemple de code, j'utiliserai un simple package de quatre classes créées à cet effet. Vous pouvez les trouver, avec les fichiers de test, dans le package de téléchargement, dans le dossier "wildcard-import". Les cours sont dans le bibliothèque
paquet.
bibliothèque d'importation. Une
.var o: One = new One ();
bibliothèque d'importation. *;
Cela devrait indiquer que même s'il semble que nous importons tout à partir du paquet, nous ne compilons vraiment que les classes que nous utilisons réellement.
***** Non, je ne suis pas
C'est, dans cet exemple hypothétique suivant:
package import SuperTrace; importer ActiveTween; Classe publique QuickTip fonction publique QuickTip ()
le SuperTrace
et ActiveTween
les classes sont importées. Mais ils ne sont jamais utilisé dans la classe. Le compilateur Flash est généralement assez intelligent pour comprendre cela et déterminer que ces deux classes ne doivent pas nécessairement être compilées pour le futur. Conseil rapide
classe.
Bien sûr, si une autre classe utilise le SuperTrace
classe, alors il sera compilé. Le fait est que le compilateur sait très bien ne pas inclure de classes inutiles dans votre fichier SWF..
Vous pouvez le prouver en mettant en place un test similaire aux tests précédents: comparez la taille en octets et les rapports de taille de deux fichiers SWF identiques, à l'exception de l'utilisation d'une classe importée. Vous pouvez voir un tel exemple en comparant les projets "import sans utilisation" et "import avec utilisation" inclus dans le fichier source.
Si, pour une raison quelconque, vous devez vous assurer que le SuperTrace
et ActiveTween
Les classes sont compilées, même si vous ne les utilisez pas dans cette classe, vous pouvez forcer cela en les référant simplement dans le corps de la classe. Par exemple:
package com.activetuts import com.activetuts.SuperTrace; import com.activetuts.ActiveTween; Classe publique QuickTip Fonction publique QuickTip SuperTrace; ActiveTween;
Cela suffit pour que le compilateur considère ces classes comme nécessaires, même si les lignes ne font pas grand chose lorsque le code est exécuté.