27 June 2006
Intermédiaire
ActionScript 3.0 est le puissant langage de programmation orienté objet qui sert de modèle de programmation au moteur d'exécution de Flash Player. Si vous utilisez déjà ActionScript 1.0 ou 2.0, il est important d'identifier les différences entre les langages avant de commencer à développer des applications avec ActionScript 3.0.
Remarque : Pour plus d'informations, consultez la liste des différences entre ActionScript 2.0 et ActionScript 3.0, dans le guide de référence du langage Flex 2.0.
Vous trouverez ci-dessous une liste d'astuces et de problèmes courants qui faciliteront la transition vers ActionScript 3.0.
package internal et non public. Le spécificateur d'accès par défaut pour les déclarations est donc internal, et non plus public. Ainsi, seul le package contenant la définition a accès à cette dernière, et non tout le code. Ceci se rapproche d'autres langages tels que Java. Le changement de la valeur de déclaration par défaut — ActionScript 2.0 utilisait public — sera vraisemblablement source d'erreurs pour les programmeurs. Il est recommandé de toujours ajouter un spécificateur d'accès aux déclarations pour plus de clarté. Pour vous encourager à procéder ainsi, le compilateur ActionScript 3.0 affiche un message d'avertissement lorsque aucun spécificateur d'accès n'est défini.class Foo est scellée. Pour déclarer une classe dynamique, utilisez le mot-clé dynamic par exemple, dynamic class Foo .package pour ajouter une définition de classe à un package. package est un nouveau mot-clé dans ActionScript 3.0.Code ActionScript 2.0 :
class mx.controls.Button { ... }
Code ActionScript 3.0 :
package mx.controls { class Button { .. } }
Comme avec ActionScript 2.0, vous devez placer une classe public dans un fichier portant le même nom que la classe. Bien que vous puissiez déclarer plusieurs classes dans un même fichier, seule une de ces classes peut être publique et le nom du fichier doit porter le nom de cette même classe.
MyPackage.MyClass, vous devez l'importer comme suit :import MyPackage.MyClass;
Cela s'applique même si toutes les références sont pleinement qualifiées à l'aide du nom complet MyPackage.MyClass. Dans ActionScript 3.0, l'instruction import indique que vous souhaitez utiliser une définition de classe provenant d'un autre package, alors que dans ActionScript 2.0, elle servait uniquement à créer des noms abrégés. Dans la version 3.0, le nom de classe complet est uniquement utilisé pour plus de clarté et non comme substitut de l'instruction import.
Vous pouvez également importer toutes les définitions d'un package à l'aide du caractère générique * :
import MyPackage.*;
Il est toutefois conseillé d'importer les définitions une à une afin d'éviter toute ambiguïté concernant leur utilisation dans le code.
override permet d'éviter les problèmes courants liés au remplacement des méthodes (erreurs dans la spécification du nom ou de la signature de la méthode remplacée ou modification du nom d'une méthode remplacée). Elle permet également d'identifier clairement les méthodes remplacées en lisant le code. Dans la mesure où le remplacement d'une méthode par une autre est spécifié par le mot-clé override, le compilateur peut effectuer une validation plus appropriée. Le mot-clé utilisé dans ActionScript 3.0 s'inspire du mot-clé override utilisé dans le langage C#.void.mx.utils.Delegate ou avoir recours à d'autres solutions pour acheminer des événements vers les méthodes :import mx.utils.Delegate;
myButton.addEventListener("click", Delegate.create(this, onClick));
Dans ActionScript 3.0, l'instance d'objet dont est extraite la référence d'une méthode est automatiquement mémorisée. Cette procédure est appelée fermeture de méthode et peut être comparée à un délégué automatique. Vous pouvez donc écrire le code comme suit :
myButton.addEventListener("click", onClick);
-verbose-stacktraces et -debug . Si vous définissez les options de ligne de commande -verbose-stacktraces et -debug lors de la compilation, les noms de fichier et numéros de ligne s'affichent dans les alertes d'exécution Flash Player. Lorsqu'une erreur d'exécution se produit, une boîte de dialogue décrivant l'erreur et indiquant la pile d'appels concernée s'affiche. L'utilisation des options -verbose-stacktraces et -debug permet d'identifier plus facilement la source de l'erreur dans le code.[Bindable].flash.display.MovieClip, et getTimer et setInterval sont désormais compris dans le package flash.utils.Timer est mieux appropriée aux événements temporels que les fonctions setInterval et setTimeout. Cette nouvelle classe présente un certain nombre d'avantages par rapport à setInterval. Elle permet notamment de ne pas avoir à utiliser des identifiants d'intervalle et fournit une interface orientée objet plus moderne. Il est donc recommandé d'utiliser la classe Timer au lieu de setInterval et setTimeout.Event. Cette nouvelle classe permet d'obtenir un système d'événements plus clair et plus efficace. Toutefois, cela signifie que vous ne pouvez plus utiliser d'instance générique de la classe Object lors de la distribution des événements, de même que vous ne pouvez plus utiliser l'abréviation littérale de l'objet, par exemple {type: 'customEvent' }.Au lieu de créer une classe Object générique, vous devez désormais utiliser la classe Event (par exemple, dispatchEvent(new Event ('myCustomEventType'))). Pour ajouter des propriétés, vous devez définir des sous-classes de Event. L'abandon de l'utilisation d'Object permet une meilleure vérification des types et accroît l'efficacité.
DisplayObject et peuvent être définis comme toute autre classe. Vous pouvez désormais créer des composants de façon dynamique à l'aide du mot-clé new et les ajouter à la liste d'affichage à l'aide de addChild. L'utilisation de createChild est à éviter. Vous pouvez instancier les entités visuelles, dont TextField, comme les autres objets et les ajouter à la liste d'affichage en toute simplicité à l'aide de addChild ou addChildAt. En conséquence, certaines API telles que createEmptyMovieClip et createTextField ont disparu. Pour créer un nouveau champ de texte, vous devez utiliser new TextField au lieu de createTextField.toXMLString avec E4X. La méthode toString ne permet pas nécessairement de renvoyer le marquage XML complet de l'objet. Pour ce faire, utilisez la méthode toXMLString. La méthode toString renvoie une valeur de chaîne adaptée à l'objet XML. L'objet XML n'est pas nécessairement sérialisé dans son intégralité. Pour obtenir le marquage XML complet, appelez la méthode toXMLString.for...in n'énumère plus les propriétés et les méthodes déclarées par une classe. Seules les propriétés dynamiques d'un objet sont énumérées. ActionScript 3.0 intègre un nouveau système d'introspection d'objet plus avancé appelé describeType. Utilisez-le pour effectuer des introspections d'objets dans ActionScript 3.0.MovieClip. Dans ActionScript 3.0, la classe de ce type d'objet peut être n'importe quelle sous-classe de Sprite. Vous pouvez définir une classe comme DocumentRoot d'un fichier SWF. Lors de son chargement, le fichier SWF instancie cette classe de façon à l'utiliser comme objet racine.Nous remercions notre communauté de développeurs pour leur assistance dans la rédaction de cet article. Bien que cette liste ne soit pas exhaustive, elle vous aidera à démarrer avec ActionScript 3.0. Si vous utilisez d'autres langages orientés objet, ces astuces constitueront essentiellement des rappels. Vous pouvez en effet mettre directement à profit dans ActionScript 3.0 les compétences acquises avec ces langages.
Si vous n'avez jamais utilisé de langage orienté objet et que vous débutez avec ActionScript 3.0, ces astuces vous seront certainement très utiles. Nous vous recommandons de les conserver à portée de main. Bonne programmation !
Tutorials & Samples |
ActionScript Blog |
More |
| 04/22/2012 | ActionScript 3.0 BitmapData, Clone, and ColorTransform |
|---|---|
| 04/06/2012 | Click in the Starling Framework |
| 04/06/2012 | Flash Player 11.3 Beta and Adobe AIR 3.3 Beta available [ FP... |
| 03/28/2012 | AS3 Drawing API oddity |
ActionScript Cookbook |
More |
| 03/20/2012 | PDF Portfolio Navigational TOC |
|---|---|
| 02/29/2012 | Embed Stage3D content inside Flex application components |
| 02/13/2012 | Randomize an array |
| 02/09/2012 | Using Camera with a MediaContainer instead of VideoDisplay |