<h2>Votre Formation vidéo</h2><br/>
Votre formation est décomposée<br/>
en chapitres très clairs de 20 à 30 min. <h2>Des exemples SWF </h2><br/>
Chaque leçon est accompagnée<br/>
du code source avec le fla et les classes. <h2>Votre Suivi personnalisé</h2><br/>
Vous pouvez  me poser toutes<br/>
vos questions sous les cours vidéos.

Sujets sur : classes

Cours ActionScript 3 ‘classes’

Utiliser n’importe quelle classe ActionScript comme un Singleton

Commentaires fermés sur Utiliser n’importe quelle classe ActionScript comme un Singleton

Ecrit le 7 février par Matthieu
Publié dans le(s) sujet(s) ActionScript 3

Vous connaissez sûrement le Pattern Singleton, un des tout premiers que l’on découvre.

Suivant le projet flash sur lequel vous travaillez, il est possible que vous ayez besoin de transformer une de vos classes en Singleton.

Toutefois, vous ne voulez pas modifier le code source de la classe, pour conserver l’architecture de votre Framework AS3.

J’ai déniché une petite classe utilitaire qui permet de “transformer” n’importe quelle classe ActionScript en Singleton.

Par exemple, dans une application flash quelconque, vous souhaitez toujours utiliser la même instance de l’objet Point, ou une seule instance TextField. Et cela, sans utiliser de variable pour stocker cette référence.

La classe net.richardlord.utils.Singleton.as s’assure qu’une seule instance de la classe, spécifiée en paramètre, existe dans toute l’application flash.

Cette classe Singleton utilise la classe Dictionary qui permet d’associer une clé à une valeur.

En l’occurrence, la clé correspond au nom de la classe, et la valeur contient l’instance de la classe.

Le gros intérêt de cette classe est de permettre de limiter à une instance unique n’importe quelle classe ActionScript, sans modifier son code !

Exemple Singleton Classes

Et voici un exemple est plus parlant.

Il s’agit de créer un objet TextField, sans sauvegarder son instance dans une variable de classe.

Puis plus loin dans une fonction de la classe, nous modifions le contenu du TextField, en utilisant la classe singleton.

/**
 
  The Initial Developer of the Original Code is
  Matthieu  - https://www.actionscript-facile.com
  Portions created by the Initial Developer are Copyright (C) 2010
  the Initial Developer. All Rights Reserved.
 
  Contributor(s) :
 
 */
package
{
	import flash.text.TextFormat;
	import flash.text.TextFieldAutoSize;
	import net.richardlord.utils.Singleton;
	import flash.text.TextField;
	import flash.events.Event;
	import flash.display.Sprite;
 
	import com.demonsters.debugger.MonsterDebugger;
 
	public class Main extends Sprite
	{
 
		/**
		 * Constructeur.
		 *
		 */
		public function Main()
		{
			// attend la fin de l'initialisation de la scène
			this.addEventListener(Event.ADDED_TO_STAGE, onReady, false, 0, true);
		}
 
		/**
		 * Démarrage de l'application.
		 * définit le nombre d'images par secondes dans les paramètres de compilation
		 * -default-frame-rate 40
		 *
		 */
		private function onReady(event : Event) : void
		{
			this.removeEventListener(Event.ADDED_TO_STAGE, onReady);
 
			// Init De MonsterDebugger
			MonsterDebugger.initialize(this);
			MonsterDebugger.trace(this, "Start Application");
 
			this.addText();
 
			var txtField:TextField = Singleton( TextField );
			this.addChild(txtField);
 
			this.updateText("Mise à jour du champ texte avec la classe Singleton !");
		}
 
		/**
		 * Création d'un champ texte.
		 *
		 */
		private function addText() : void
		{
			 var txtField:TextField = Singleton( TextField );
		     txtField.text = "Texte d'initilisation...";
		     txtField.autoSize = TextFieldAutoSize.LEFT;
		     txtField.textColor = 0x006f77;
		     txtField.selectable = false;
		 	 txtField.x = 33;
			 txtField.y = 163;
 
		     // définit le format par défaut du texte
		     var format : TextFormat = new TextFormat();
		     format.size = 21;
		     format.font = "Arial";
		     txtField.defaultTextFormat = format;
		}
 
		/**
		 * Mise à jour du champ texte
		 * en utilisant la classe singleton
		 *
		 */
		private function updateText(sValue:String) : void
		{
			var txtField:TextField = Singleton( TextField );
			 txtField.text = sValue;
		}
 
	}
}
Singleton   
/*
 * Author: Richard Lord
 * Copyright (c) Richard Lord 2007
 * http://www.richardlord.net/blog/singleton-factory
 *
 * Licence Agreement (The MIT License)
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
package net.richardlord.utils
{
	/**
	 * Returns the same instance of a class every time. If necessary, it creates an instance.
	 *
	 * Usage -
	 * var a:SomeClass = singleton( SomeClass );
	 */
	public function Singleton( type : Class ) : *
	{
		return type in instances ? instances[type] : instances[type] = new type();
	}
}
 
import flash.utils.Dictionary;
var instances : Dictionary = new Dictionary( false );

SWF Démonstration Singleton Classes

Et voici le swf basique pour illustrer l’utilisation de cette classe Singleton.

https://www.actionscript-facile.com/wp-content/uploads/2012/02/singleton-classes.swf

Télécharger le code source Singleton

Visiter le site de l’auteur : Richard Lord

Télécharger “Singleton Classes” ex-singleton-classes.zip – Téléchargé 118 fois – 75 Ko

Utilisez-vous des classes utilitaires pour vous simplifier la programmation ActionScript ?

Partagez-les avec les Développeurs AS3 Facile, via les commentaires ci-dessous.

AMELIORATION de SWFExplorer : parcourir toutes les classes d’une librairie externe

1 question

Ecrit le 29 septembre par Matthieu
Publié dans le(s) sujet(s) ActionScript 3

Dans le cours AS3 (SWFExplorer) précédent, nous avons appris à utiliser la classe SWFExplorer et surtout dans quels cas l’implémenter dans une application flash.

Il existe une version encore plus performante de cette classe : SWFExplorer améliorée.

En plus des fonctionnalités de SWFExplorer, cette version améliorée permet carrément de récupérer TOUTES les classes d’un fichier SWF.

C’est à dire, même les classes qui ne sont pas linkées.

Cette version de SWFExplorer est encore plus simple d’utilisation pour instancier des classes d’une librairie SWF partagée.

Voici ce que je vais vous apprendre dans ce cours AS3 :

  • Comment utiliser la classe SWFExplorer version améliorée.
  • La technique pour charger un fichier SWF contenant des éléments partagés (graphismes, animations, polices de caractères…).
  • Pourquoi utiliser la version améliorée de SWFExplorer.

Après avoir visionné ce cours ActionScript, vous serez capable d’utiliser la classe SWFExplorer version améliorée dans vos applications et jeux flash.

SWFExplorer améliorée

Exemple de code AS3 SWFExplorer

Voici la classe Main qui utilise les fonctionnalités de SWFExplorer version améliorée.

package
{
 
	import flash.utils.ByteArray;
	import ru.etcs.utils.getDefinitionNames;
 
	import flash.display.Loader;
	import flash.net.URLRequest;
	import flash.events.Event;
	import flash.display.Sprite;
 
	import com.demonsters.debugger.MonsterDebugger;
 
	/**
	 * La classe Main qui étend Sprite.
	 *
	 * définit le nombre d'images par secondes dans les paramètres de compilation
	 * -default-frame-rate 10
	 *
	 * source : http://etcs.ru/pre/getDefinitionNamesSource/
	 *
	 */
	public class Main extends Sprite
	{		
 
		/**
		 * Constructeur.
		 */
		public function Main()
		{
			// attend la fin de l'initialisation de la scène
			this.addEventListener(Event.ADDED_TO_STAGE, onReady, false, 0, true);
		}
 
		/**
		 * Démarrage de l'application.
		 * définit le nombre d'images par secondes dans les paramètres de compilation
		 * -default-frame-rate 10
		 *
		 */
		private function onReady(event : Event) : void
		{
			this.removeEventListener(Event.ADDED_TO_STAGE, onReady);
 
			// Init De MonsterDebugger
			MonsterDebugger.initialize(this);
			MonsterDebugger.trace(this, "Start Application");
 
			loadSWF();
		}
 
		/**
		 * Chargement d'un SWF à partir d'un objet Loader.
		 *
		 */
		private function loadSWF() : void
		{
			var _loader:Loader = new Loader();
			_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onSWFLoaded );
			//var file:URLRequest =  new URLRequest("fonts.swf");
			//var file:URLRequest =  new URLRequest("ui.swf");
			var file:URLRequest =  new URLRequest("pixlib.swf");
			_loader.load(file);
		}
 
		/**
		 * SWF chargé.
		 * Récupération des définitions de classes.
		 *
		 */
		private function onSWFLoaded(event : Event) : void
		{
			MonsterDebugger.trace(this, "onSWFLoaded parse some SWF bytes");
			MonsterDebugger.trace(this, event);
 
			var libraryBytes : ByteArray = event.target.content.loaderInfo.bytes as ByteArray;
 
			// affiche toutes les classes du fichier swf
			MonsterDebugger.trace(this, getDefinitionNames(libraryBytes));
 
			// affiche toutes les classes du fichier swf avec en plus les interfaces, les vecteurs, namespace...
            MonsterDebugger.trace(this, getDefinitionNames(libraryBytes, true));
 
			// affiche seulement les classes avec un lien public (avec un linkage)
			// pratique pour récupérer les linkages graphiques de votre fichier swf
            MonsterDebugger.trace(this, getDefinitionNames(libraryBytes, true, true));
		}
 
	}
}

 

Télécharger le code source du cours AS3

Vous trouverez un exemple de code source utilisant SWFExplorer améliorée.

Télécharger “SWFExplorer améliorée” swfexplorer-ameliore-exemple.zip – Téléchargé 123 fois – 362 Ko

Télécharger la dernière version de SWFExplorer améliorée.

Connaissez-vous cette classe SWFExplorer améliorée ? L’utilisez-vous dans vos projets flash ?

Ou peut être que vous utilisez la méthode classique d’Adobe Flash en produisant un seul fichier SWF ?

Partagez votre expérience de développeurs ActionScript dans les commentaires ci-dessous.

Parcourir toutes les classes d’une librairie externe avec SWFExplorer

1 question

Ecrit le 20 septembre par Matthieu
Publié dans le(s) sujet(s) ActionScript 3

Continuons la découverte de classes très utiles dans le développement d’applications et jeux flash : SWFExplorer.

Encore une nouvelle classe développée par Thibault Imbert.

Vous vous demandez peut être à quoi peut servir l’exploration d’un fichier SWF, je m’étais posé la même question au départ.

En fait, cela permet d’instancier dynamiquement des objets (classes, éléments graphiques…) dans notre application flash.

C’est à dire, votre main.swf charge des librairies partagées (assets.swf), des polices de caractères (fonts.swf), etc…

Puis directement dans main.swf et sans connaître à l’avance le nom des classes, vous pouvez les instancier.

SWFExplorer vous permet de récupérer les noms de classes disponibles dans un fichier SWF.

Voici ce que je vais vous apprendre dans ce cours AS3 :

  • Comment utiliser la classe SWFExplorer.
  • 2 techniques pour charger un fichier SWF contenant des éléments partagés (graphismes, animations, polices de caractères…).
  • L’intérêt d’utiliser les fonctionnalités de SWFExplorer.

Après avoir visionné ce cours ActionScript, vous serez capable d’utiliser la classe SWFExplorer dans vos applications et jeux flash.

SWFExplorer

Exemple de code AS3 SWFExplorer

Voici la classe Main qui utilise les fonctionnalités de SWFExplorer.

package
{
 
	import flash.display.Loader;
	import flash.utils.ByteArray;
	import org.bytearray.explorer.SWFExplorer;
	import flash.net.URLRequest;
	import org.bytearray.explorer.events.SWFExplorerEvent;
	import flash.events.Event;
	import flash.display.Sprite;
 
	import com.demonsters.debugger.MonsterDebugger;
 
	/**
	 * La classe Main qui étend Sprite.
	 *
	 * définit le nombre d'images par secondes dans les paramètres de compilation
	 * -default-frame-rate 10
	 *
	 * source : http://code.google.com/p/swfexplorer/
	 *
	 */
	public class Main extends Sprite
	{
		private var oSWFexplorer : SWFExplorer;
 
		/**
		 * Constructeur.
		 *
		 */
		public function Main()
		{
			// attend la fin de l'initialisation de la scène
			this.addEventListener(Event.ADDED_TO_STAGE, onReady, false, 0, true);
		}
 
		/**
		 * Démarrage de l'application.
		 * définit le nombre d'images par secondes dans les paramètres de compilation
		 * -default-frame-rate 10
		 *
		 */
		private function onReady(event : Event) : void
		{
			this.removeEventListener(Event.ADDED_TO_STAGE, onReady);
 
			// Init De MonsterDebugger
			MonsterDebugger.initialize(this);
			MonsterDebugger.trace(this, "Start Application");
 
			// chargement d'un SWF à partir d'un objet SWFExplorer
			oSWFexplorer  = new SWFExplorer();
			oSWFexplorer.addEventListener(SWFExplorerEvent.COMPLETE, onLoadAssetsReady);
 
			//oSWFexplorer.load(new URLRequest("fonts.swf"));
			oSWFexplorer.load(new URLRequest("eaze-tween.swf"));
		}
 
		/**
		 * Chargement d'un SWF à partir d'un objet Loader.
		 *
		 */
		private function loadSWF() : void
		{
			var _loader:Loader = new Loader();
			_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onSWFLoaded );
			var file:URLRequest =  new URLRequest("fonts.swf");
			_loader.load(file);
		}
 
		/**
		 * SWF chargé.
		 * Récupération des définitions de classes.
		 *
		 */
		private function onSWFLoaded(event : Event) : void
		{
			MonsterDebugger.trace(this, "onSWFLoaded parse some SWF bytes");
			MonsterDebugger.trace(this, event);
 
			var libraryBytes : ByteArray = event.target.content.loaderInfo.bytes as ByteArray;
			var definitions:Array = oSWFexplorer.parse(libraryBytes);
 
			MonsterDebugger.trace(this,  "definitions ");
			// renvoie un tableau contenant les définitions des classes
			MonsterDebugger.trace(this,  definitions );
 
			// renvoie un tableau contenant les définitions des classes
			MonsterDebugger.trace(this,  oSWFexplorer.getDefinitions() );
 
			// affiche le nombre de classes
			MonsterDebugger.trace(this, oSWFexplorer.getTotalDefinitions());
		}
 
		/**
		 * SWF chargé par SWFExplorer.
		 * Récupération des définitions de classes.
		 *
		 */
		private function onLoadAssetsReady(e : SWFExplorerEvent) : void
		{
			oSWFexplorer.removeEventListener(SWFExplorerEvent.COMPLETE, onLoadAssetsReady);
 
			MonsterDebugger.trace(this, "onLoadAssetsReady");
			MonsterDebugger.trace(this, e);
 
			// renvoie un tableau contenant les définitions des classes
			MonsterDebugger.trace(this, e.definitions);
 
			// renvoie un tableau contenant les définitions des classes
			MonsterDebugger.trace(this, e.target.getDefinitions());
 
			// affiche le nombre de classes
			MonsterDebugger.trace(this, e.target.getTotalDefinitions());
 
			loadSWF();
		}
 
	}
}

Télécharger le code source du cours AS3

Vous trouverez un exemple de code source utilisant SWFExplorer.

Télécharger “SWFExplorer” SWFExplorer-exemple.zip – Téléchargé 138 fois – 332 Ko

Télécharger la dernière version de SWFExplorer.

Connaissez-vous cette classe SWFExplorer ? L’utilisez-vous dans vos projets flash ?

Partagez vos classes utilitaires dans les commentaires ci-dessous.

 


ut nunc diam Nullam Phasellus efficitur. mattis elit. libero