Tout ce que vous pourriez vouloir savoir sur les déclarations d'importation *

* Pas vraiment tout.


Les importations sont requises **

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.


** Sauf si la classe est dans le même forfait

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:


Les instructions d'importation sont des codes auto-documentés

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ées

Il 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:

  1. Créer un nouvelle FLA et associés classe de document.
  2. 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 () 
  3. Ouvrez le Publier les paramètres en appuyant sur Option-Shift-F12 / Alt-Shift-F12 (ou en choisissant Fichier> Paramètres de publication?).
  4. Clique sur le "Flash"onglet.
  5. Dans le "Avancée"section, cochez la"Générer un rapport de taille"option.
  6. Aussi, dans le "Paramètres SWF"section, cochez la"Export SWC"option, un ONUvérifier la "Inclure les métadonnées XMP"option (cette dernière option supprime un tas de métadonnées du fichier SWF qui gonfle la taille du fichier SWF et gâche le rapport de taille que nous allons examiner).
  7. Appuyez sur Contrôle / Commande-Entrée pour Tester le film.
  8. Appuyez sur Contrôle / Commande-B pour ouvrir le Profileur de bande passante (également disponible sous Affichage> Profondeur de bande passante lors de l'affichage du fichier SWF)
  9. Notez le nombre d’octets de ce fichier SWF (le mien est en cours). 354, votre kilométrage peut varier, mais ce sera dans cet intervalle). Assurez-vous de noter les octets et non les kilo-octets. Rappelez-vous ce nombre.
  10. Fermer le fichier SWF.
  11. 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.

  12. Tester le film encore. Le profileur de bande passante devrait toujours être ouvert depuis la dernière fois; sinon rouvrez-le.
  13. Notez la taille du fichier SWF: je rapporte 596 octets avec le code ci-dessus, une augmentation de 242 octets. Ce n'est pas beaucoup, vu que j'utilise 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.
  14. 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.


Les importations génériques ne sont pas inefficaces

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.

  1. Créer un nouvelle FLA, et associés classe de document.
  2. Dans votre code, importer une seule classe. Par exemple:
    bibliothèque d'importation. Une.
  3. Et assurez-vous de utilise le, comme avec
    var o: One = new One ();
  4. Tester le film (presse Commande-Retour / Contrôle-Entrée, ou aller à Contrôle> Tester le film).
  5. Ouvrez le profileur de bande passante avec le fichier SWF actif (appuyez sur Command-B / Contrôle-B ou aller à Affichage> Profileur de bande passante)
  6. Notez la taille du fichier SWF (encore une fois, en octets, pas en kilo-octets).
  7. Fermer le fichier SWF
  8. Modifiez votre classe de document afin que le import utilise un joker au lieu. Par exemple:
    bibliothèque d'importation. *;
  9. Tester le film encore.
  10. Notez la taille du fichier SWF. CA devrait etre identique comme la dernière fois.
  11. Vous pouvez également activer le rapport de taille (n'oubliez pas d'activer l'option SWC et de désactiver l'option XMP) pour voir quelles classes sont compilées..

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


Une déclaration d'importation seule ne compilera pas la classe

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é.