I. Introduction

À travers ces quelques cours généralistes, apprenez les bases de la programmation.
Avec la méthode "Développement Facile", vous allez acquérir les bases qui vous seront nécessaires pour devenir un développeur professionnel.
Retrouvez ici, un extrait de la formation "Développement Facile", composée de nombreux cours professionnels pour vous aider à progresser rapidement.

II. Comment utiliser les tableaux simple et à plusieurs dimensions dans votre langage de programmation ?

Une des bases de la programmation est l'utilisation des tableaux.
Dans cette vidéo, découvrez comment les créer et interagir avec.


Ci-dessous, l'exemple de code.

 
Sélectionnez

/**

  The Initial Developer of the Original Code is
  Matthieu  - http://www.programmation-facile.com/
  Portions created by the Initial Developer are Copyright (C) 2013
  the Initial Developer. All Rights Reserved.

  Contributor(s) :

 */
package  
{
	import flash.display.MovieClip;
	import flash.display.DisplayObject;
	import com.demonsters.debugger.MonsterDebugger;

	import com.actionscriptfacile.ui.text.UITextField;


	import flash.display.Sprite;
	import flash.events.Event;
	
	
	/**
	 * Exemple d'utilisation tableaux en ActionScript
	 * 
	 * @author Matthieu
	 */
	public class Main extends Sprite
	{				
		
		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.
		 * 
		 */
		protected function onReady(event : Event) : void
		{
			this.removeEventListener(Event.ADDED_TO_STAGE, onReady);
			
			// Init De MonsterDebugger
            MonsterDebugger.initialize(this);
            MonsterDebugger.trace(this, "Manipulation des données");
            
			this.useArray();
			this.multiDimensionalArray();
		}
		
		
		
		/**
		 * Les tableaux à plusieurs dimensions.
		 * Parcourir les tableaux.
		 * 
		 */
		private function multiDimensionalArray() : void
		{			
			var aCountryList:Array = new Array(); 
			aCountryList[0] = ["Californie", "Alabama", "Arizona"]; 
			aCountryList[1] = ["Bretagne", "Auvergne", "Aquitaine", "Isère"]; 
			aCountryList[2] = ["Suisse", "Australie", "Inde"]; 
			aCountryList[3] = ["Japon"]; 
			aCountryList[4] = ["Chine", "Russie"]; 
			
			MonsterDebugger.trace(this, "----> multiDimensionalArray");
			MonsterDebugger.trace(this, "Pays : "+aCountryList[3][0]);// affiche Japon
			MonsterDebugger.trace(this, "Pays : "+aCountryList[4][1]);// affiche Russie
			MonsterDebugger.trace(this, "Pays : "+aCountryList[0]);// affiche le tableau des Etats Unis
			trace("test");
			
			// parcours d'un tableau à plusieurs dimensions
			for (var j : int = 0; j < aCountryList.length; j++)
			{  
				MonsterDebugger.trace(this, "Liste des éléments de la 2e dimension à la position " + j +" du 1er tableau");
				
				for (var k : int = 0; k < aCountryList[j].length; k++)
				{
					MonsterDebugger.trace(this, "Pays ou Etat : " + aCountryList[j][k]);
				}
			}
			
			MonsterDebugger.trace(this, "parcours rapide d'un tableau à plusieurs dimensions");
			
			// parcours rapide d'un tableau
			for each (var aListEtats : Array in aCountryList)
			{
				for each (var sEtats : String in aListEtats)
				{
					MonsterDebugger.trace(this, "Etat ou Pays : " + sEtats);
				}
			}
			
			
			var aFruits:Array = ['pomme', 'orange', 'banane', 'pêche', 'clémentine'];
			// parcours d'un tableau
			for (var i : int = 0; i < aFruits.length; i++)
			{  
				MonsterDebugger.trace(this, "Position " + i +" du tableau des fruits, il y a " + aFruits[i]);
			}
			
			// recherche dans un tableau
			var sSearch:String = "banane";
			i=0;
			while( i < aFruits.length && sSearch != aFruits[i] )
     		{
				i++;
			}
			trace("Position " + i +" du fruit " + sSearch);
			MonsterDebugger.trace(this, "Position " + i +" du fruit " + sSearch);
			
			// parcours rapide d'un tableau
			for each (var sFruit : String in aFruits)
			{
				MonsterDebugger.trace(this, "Fruit : " + sFruit);
			}
		}


		/**
		 * Utilisation pratique des tableaux.
		 * 
		 */
		private function useArray() : void 
		{
			
			/**
			 * Array.forEach procède à une navigation simple
			 * sur chaque élément à partir d'une fonction dédiée
			 * 
			 */ 
			var aFruits:Array = ['pomme', 'orange', 'banane', 'pêche', 'clémentine'];
			aFruits.forEach(afficheAll);// Permet d'itérer simplement au sein d'un tableau.
			
			/**
			 * la classe Vector est comme la classe Array
			 * la classe Vector est un tableau dont les éléments possèdent tous le même type de données.
			 * plus dinformations sur :
			 * http://help.adobe.com/fr_FR/FlashPlatform/reference/actionscript/3/Vector.html
			 * 
			 * Au niveau des performances :
			 * Dans tous les cas  vous utilisez un objet Array dont tous les éléments possèdent le même type de données, 
			 * il est préférable d'utiliser une occurrence de l'objet Vector.
			 * 
			 */ 
			var vaFruits:Vector.<String> = new <String>['pomme2', 'orange2', 'banane2', 'pêche2', 'clémentine2'];
			vaFruits.forEach(afficheAllVector);// Permet d'itérer simplement au sein d'un tableau.
			
			/**
			 * Array.every
			 * Exécute la fonction de navigation pour trouver le type d'élément et renvoie false.
  		     * Il est donc très facile de déterminer si un tableau contient un type de valeurs attendues.
  		     * 
			 */
			var aData:Array = [12, 'pomme', 'orange', 32, 'banane', 'pêche', 28, 'clémentine'];// déterminer si le tableau contient des nombres
			var bNombres:Boolean = aData.every(testElements);// affiche&#160;: false		
			MonsterDebugger.trace(this, "que des nombres dans le tableau aData :"+bNombres);
			
			var aDataN:Array = [12, 32, 28];
			bNombres = aDataN.every(testElements);// affiche&#160;: true			
			MonsterDebugger.trace(this, "que des nombres dans le tableau aDataN :"+bNombres);
			
			/**
			 * Array.map
			 * Exécute la fonction de navigation.
  		     * Permet de créer un nouveau tableau.
  		     * 
			 */
			// création d'un nouveau tableau à partir du retour de la fonction affiche.
			var aFruitsFormat:Array = aFruits.map(elementToUpperCase);
			// affiche&#160;: Pomme, Orange, Banane
			MonsterDebugger.trace(this, aFruitsFormat);
			
			
			/**
			 * Array.filter
			 * Exécute la fonction de navigation.
  		     * Permet de filtrer les éléments d'un tableau.
  		     * 
			 */
			var aFruitsDetails:Array = [ { fruit&#160;: 'pomme', calorie&#160;: 48 },
										{ fruit&#160;: 'orange', calorie&#160;: 40 },
										{ fruit&#160;: 'banane', calorie&#160;: 94 },
										{ fruit&#160;: 'abricots', calorie&#160;: 45 },
										{ fruit&#160;: 'pêche', calorie&#160;: 50 },
										{ fruit&#160;: 'clémentine', calorie&#160;: 88 }
									]&#160;;
			
			var aFruitsRiches:Array = aFruitsDetails.filter(filterElement);// création d'un nouveau tableau en supprimant les éléments inférieurs à 50 calories
			aFruitsRiches.forEach(afficheAllFruits);									
			
			
			/**
			 * Array.some
			 * Exécute la fonction de navigation.
  		     * Permet de savoir si un élément existe au moins une fois dans un tableau.
  		     * 
			 */
 			var aPersonnes:Array = [ { prenom&#160;: 'Nicolas', age&#160;: 50, sexe&#160;: 'H' },
									{ prenom&#160;: 'Frédéric', age&#160;: 30, sexe&#160;: 'H' },
									{ prenom&#160;: 'Alice', age&#160;: 28, sexe&#160;: 'F' },
									{ prenom&#160;: 'Yannick', age&#160;: 29, sexe&#160;: 'H' } 
								]&#160;;

			var bsearchFemme:Boolean = aPersonnes.some(searchFemme);// affiche true
			MonsterDebugger.trace(this, "une femme dans le tableau aPersonnes :"+bsearchFemme);
			
 			var aPersonnes2:Array = [ { prenom&#160;: 'Nicolas', age&#160;: 50, sexe&#160;: 'H' },
									{ prenom&#160;: 'Frédéric', age&#160;: 30, sexe&#160;: 'H' },
									{ prenom&#160;: 'François', age&#160;: 28, sexe&#160;: 'H' },
									{ prenom&#160;: 'Yannick', age&#160;: 29, sexe&#160;: 'H' } 
								]&#160;;

			bsearchFemme = aPersonnes2.some(searchFemme);// affiche false
			MonsterDebugger.trace(this, "une femme dans le tableau aPersonnes2 :"+bsearchFemme);			
			
			
			/**
			 * Array.indexOf et Array.lastIndexOf
			 * Permet de rechercher si un élément existe et de connaître sa position.
			 * 
			 * indexOf pour la position du 1er élément trouvé.
			 * lastIndexOf pour la position du dernier élément trouvé.
  		     * 
  		     * Possibilité de rechercher un élément de type primitif (number, string) et de type composite (MovieClip, DisplayObject).
			 */
			 
			var aPersonnesListe:Array = [ 'Nicolas', 'Yannick', 'Caroline', 'Yannick', 'Antoine' ];
			
			var positionDebut:int = aPersonnesListe.indexOf('Yannick');
			var positionFin:int = aPersonnesListe.lastIndexOf('Yannick');
			var positionNulle:int = aPersonnesListe.indexOf('François');
			
			MonsterDebugger.trace(this, "1ère position du prénom Yannick :"+positionDebut);// affiche&#160;: 1
			MonsterDebugger.trace(this, "dernière position du prénom Yannick :"+positionFin);// affiche&#160;: 3
			MonsterDebugger.trace(this, "position (inxistante) du prénom François :"+positionNulle);// élément non trouvé affiche&#160;: -1
			 
			/**
			 * utilisé également pour rechercher un élément de type primitif (number, string) et de type composite (MovieClip, DisplayObject).
			 * une recherche par référence d'objets.
			 */ 
			 
			var oDisplay:DisplayObject = new MovieClip();
			var oDisplayAutre:DisplayObject = new MovieClip();
			
			var aTableau:Array = [oDisplay]&#160;;// stock une référence au clip oDisplay dans un tableau
			var positionClip:int  = aTableau.indexOf(oDisplay);
			var positionAutre:int  = aTableau.lastIndexOf(oDisplayAutre);
			
			MonsterDebugger.trace(this, "recherche du clip oDisplay :"+positionClip);// affiche&#160;: 0, clip trouvé
			MonsterDebugger.trace(this, "recherche du clip oDisplayAutre :"+positionAutre);// affiche&#160;: -1, clip inexistant 
			 
			/**
			 * d'autres fonction utiles sur : 
			 * http://livedocs.adobe.com/flash/9.0_fr/ActionScriptLangRefV3/Array.html
			 * 
			 * splice pour supprimer un élément d'un tableau.
			 * Par exemple var aTableau:Array = aTableauComplet.splice( index, 1); // supprime un seul élément du tableau complet à la position index
			 */ 
			var aTableauComplet:Array = new Array("maison", "voyages", "voiture", "plage", "montagne", "parc");
			var aTabMini:Array = aTableauComplet.splice(2,1); // supprime l'élément voiture -- aTabMini contient l'élément supprimé
			MonsterDebugger.trace(this, "Array splice");
			MonsterDebugger.trace(this, aTableauComplet);
			MonsterDebugger.trace(this, aTabMini);
			
			/**
			 * Il y a aussi les méthodes  push(), pop(), shift(), unshift().
			 * 
			 * La méthode push() ajoute un ou plusieurs éléments à la fin d'un vecteur ou d'un tableau array.
			 * La méthode unshift() ajoute un ou plusieurs éléments au début d'un vecteur ou d'un tableau array
			 * et renvoie la nouvelle longueur du vecteur. 
			 * La méthode pop() supprime le dernier élément du vecteur et renvoie cet élément. La propriété length du vecteur est diminuée d'une unité lorsque cette fonction est appelée
			 * 
			 */
			 
			var avMois:Vector.<String> = new <String>['Janvier', 'Février', 'Mars', 'Avril'];
			avMois.push("Mai");
			avMois.push("Juin", "Juillet");
			MonsterDebugger.trace(this, "Array push");
			MonsterDebugger.trace(this, avMois);
			
			var avDuree:Vector.<int> = new <int>[20, 26, 32, 36];
			var nNbreElts:int = avDuree.push(45, 56, 67);// ajout à la fin du tableau
			MonsterDebugger.trace(this, "Nombre d'éléments dans le vecteur après l'ajout : " + nNbreElts);
			nNbreElts = avDuree.unshift(3, 10);// ajout au début du tableau
			MonsterDebugger.trace(this, "Nombre d'éléments dans le vecteur après l'ajout : " + nNbreElts);
			MonsterDebugger.trace(this, "tableau aevc unshift: ");
			MonsterDebugger.trace(this, avDuree);
		}


		
		/**
		 * Fonction de navigation passée en paramètre d'un tableau
		 * pour itérer et traiter les données au sein du tableau.
		 * 
		 * Il est possible d'ajouter vos propres traitements pour un affichage de données, remplir un formulaire... 
		 * 
		 * @param element : l'élément du tableau en cours de lecture.
		 * @param index : la position de l'élément dans le tableau.
		 * @param tableau : le tableau complet.
		 * 
		 */
		private function afficheAll (element&#160;:*, index:int, tableau:Array):void
		{
		     var sContentTb:String = "Element : "+element + ', position : ' + index + ', contenu : ' + tableau;
			 MonsterDebugger.trace(this, sContentTb);
			 
			 var oText:UITextField = this.addText(sContentTb);
			 oText.y = index * 15;
			 this.addChild(oText);// affiche chaque élément du tableau dans un champ texte
		}


		/**
		 * Fonction de navigation passée en paramètre d'un tableau
		 * pour itérer et traiter les données au sein du tableau.
		 * 
		 * Il est possible d'ajouter vos propres traitements pour un affichage de données, remplir un formulaire... 
		 * 
		 * @param element : l'élément du tableau en cours de lecture.
		 * @param index : la position de l'élément dans le tableau.
		 * @param tableau : le tableau complet.
		 * 
		 */
		private function afficheAllVector (element&#160;:String, index:int, tableau:Vector.<String>):void
		{
		     var sContentTb:String = "Element : "+element + ', position : ' + index + ', contenu : ' + tableau;
			 MonsterDebugger.trace(this, sContentTb);
			 
			 var oText:UITextField = this.addText(sContentTb);
			 oText.y = 300 + index * 15;
			 this.addChild(oText);// affiche chaque élément du tableau dans un champ texte
		}		
		
		
		
		/**
		 * Fonction de navigation passée en paramètre d'un tableau
		 * pour itérer et de traiter les données au sein du tableau.
		 * 
		 * Il est possible d'ajouter vos propres traitements pour un affichage de données, remplir un formulaire... 
		 * 
		 * @param element : l'élément du tableau en cours de lecture.
		 * @param index : la position de l'élément dans le tableau.
		 * @param tableau : le tableau complet.
		 * 
		 */
		private function afficheAllFruits (element&#160;:*, index:int, tableau:Array):void
		{
		     var sContentTb:String = "Fruit : "+element.fruit + ', Calories : ' + element.calorie;
			 MonsterDebugger.trace(this,sContentTb);
			  
			 var oText:UITextField = this.addText(sContentTb);
			 oText.y = 200 + index * 15;
			 this.addChild(oText);// affiche chaque élément du tableau dans un champ texte
		}
		
				
		/**
		 * Fonction de navigation passée en paramètre d'un tableau
		 * pour itérer et de traiter les données au sein du tableau.
		 * 
		 * Détermine si un tableau contient un type de valeurs attendues (des nombres)
		 * 
		 * @param element : l'élément du tableau en cours de lecture.
		 * @param index : la position de l'élément dans le tableau.
		 * @param tableau : le tableau complet.
		 * 
		 */
		private function testElements (element&#160;:*, index:int, tableau:Array):Boolean
		{
		     return (element is Number);
		}
			
			
			
		/**
		 * Fonction de navigation passée en paramètre d'un tableau
		 * Permet de créer un nouveau tableau.
		 * 
		 * Formatage des caractères  des éléments du tableau : 1ère lettre en majuscule et les autres en minuscules.
		 * 
		 * @param element : l'élément du tableau en cours de lecture.
		 * @param index : la position de l'élément dans le tableau.
		 * @param tableau : le tableau complet.
		 * 
		 */			
		private function elementToUpperCase (element&#160;:*, index:int, tableau:Array):String
		{
			 var sText:String = element.charAt(0).toUpperCase()+element.substr(1).toLowerCase();
			 var oText:UITextField = this.addText(sText);
			 oText.y = 100 + index * 15;
			 this.addChild(oText);// affiche chaque élément du tableau dans un champ texte
			 
			 return sText;
		}	
		
		
		/**
		 * Fonction de navigation passée en paramètre d'un tableau
		 * Permet de créer un nouveau tableau.
		 * 
		 * Pour les filter les éléments d'un tableau
		 * Renvoie uniquement les éléments supérieurs ou égaux à 50 calories.
		 * 
		 * @param element : l'élément du tableau en cours de lecture.
		 * @param index : la position de l'élément dans le tableau.
		 * @param tableau : le tableau complet.
		 * 
		 */			
		private function filterElement (element&#160;:*, index:int, tableau:Array):Boolean
		{    
			return element.calorie >= 50;   
		}
			

		/**
		 * Fonction de navigation passée en paramètre d'un tableau
		 * La fonction de navigation est exécutée jusqu'à ce qu'elle renvoie true.
		 * 
		 * Permet de savoir si un élément existe au moins une fois dans un tableau
		 * Renvoie true si il y a au moins une femme dans le tableau.
		 * 
		 * @param element : l'élément du tableau en cours de lecture.
		 * @param index : la position de l'élément dans le tableau.
		 * @param tableau : le tableau complet.
		 * 
		 */					
		private function searchFemme (element&#160;:*, index:int, tableau:Array):Boolean
		{
			return (element.sexe == 'F');   
		}	
		
		
			
		/**
		 * Création d'un champ texte.
		 * 
		 */
		private function addText(sValue:String) : UITextField
		{
			var oTxtField:UITextField = new UITextField();
			oTxtField.text = sValue;
			oTxtField.selectable = false;
			oTxtField.autoSizeLeft();
			oTxtField.changeFormat("size", 13);// changement de la taille de la police du texte
			oTxtField.changeFormat("font", "Arial");// changement de la taille de la police du texte
			oTxtField.changeFormat("color", Math.random() *0X006f77);// changement de la couleur
			
			return oTxtField;	 
		}
		
	}

}				
		

III. Comment utiliser les boucles en programmation ?

Un élément essentiel dans la programmation est de pouvoir répéter plusieurs fois un algorithme.
Vous verrez, dans cette vidéo, comment résoudre ce problème avec l'utilisation des boucles.


Ci-dessous, l'exemple de code.

 
Sélectionnez

package application.app.view
{
	import flash.geom.Point;
	
	import flash.display.Sprite;

	import application.app.ApplicationFacade;

	import org.puremvc.as3.interfaces.IMediator;
	import org.puremvc.as3.interfaces.INotification;
	import org.puremvc.as3.patterns.mediator.Mediator;

	/**
	 * Permet de construire notre menu et d'interagir avec nos composants graphiques.
	 * 
	 * @author matth
	 */
	public class ViewKartIA extends Mediator implements IMediator
	{
		public static const NAME : String = "ViewKartIA";// intelligence artificielle
		
		private var oKart : Sprite;
		public var oLineTestRace : Sprite;// ligne de test du circuit	
		private var oRace : Sprite;// référence au clip circuit
				
		/* variables ajustement kart */
		public var speed_decay:Number;
		public var rotation_step:Number;// vitesse de rotation
	
		public var nAcceleration : Number;// accélération du kart
		public var nMaxSpeed : Number;// vitesse maximum du kart
		public var nSpeed : Number;// vitesse du kart
		
		
		public var nAngleTest : Number;// angle pour la ligne de test		
		public var nPrecision : int;// la précision : plus c'est élevé plus c'est précis, et plus lent pour la simulation		
		public var nSizeTest : int;// la longueur pour les tests d'anticipation des collisions	
		public var nNumberSteps : int;// le nombre d'étapes requis pour valider les tests		
		public var nTurnTolerance : int;// la tolérance pour tourner

		
		
		public function ViewKartIA(viewComponent : Object)
		{
			super(NAME, viewComponent);
			this.setupUi();
		}


		/**
		 * Initialisation de l'interface utilisateur.
		 * 
		 */
		private function setupUi() : void
		{
			// création et configuration du kart
			oKart = new KartIA1();
			stageV.addChild(oKart);
			
			oLineTestRace = new Sprite();
			oKart.addChild(oLineTestRace);
		}


		/**
		 * Initialisation des variables pour une nouvelle partie
		 * 
		 */
		private function startGame() : void
		{
			// position de départ du kart
			oKart.x = 450;
			oKart.y = 300;
			oKart.rotation = 0;
			
			nAngleTest = 90;
			nPrecision = 13;
			nSizeTest = 63;
			nNumberSteps = 13;
			nTurnTolerance = 13;
			
			speed_decay = 0.96;
			rotation_step = 10;// vitesse de rotation
			nAcceleration = 0.33;// accélération du kart
			nMaxSpeed = 5;// vitesse maximum du kart
			nSpeed = 0;// vitesse du kart
		}

			
		/**
		 * Déplace le kart IA en fonction des tests de collision du circuit.
		 * 
		 */
		private function moveKart() : void
		{
			var angle_step : Number = nAngleTest * 2 / nPrecision;
			var sight_point : Point;
			var global_sight_point : Point;
			
			var turn_left : int = 0;// contient le résultat du test de collision
			var bCollision : Boolean = false;// collision avec le circuit ?
			
			oLineTestRace.graphics.clear();
			oLineTestRace.graphics.lineStyle(1, 0x00C5DF);
			
			// détermine la prochaine trajectoire du kart (test avec les lignes)
			for (var i : int = 0; i <= nPrecision; i++)
			{
				for (var j : int = 1; j <= nNumberSteps; j++)
				{
					oLineTestRace.graphics.moveTo(0, -15);
					sight_point = new Point(nSizeTest / nNumberSteps * j * Math.cos((-90 - nAngleTest + angle_step * i) * 0.0174532925), nSizeTest / nNumberSteps * j * Math.sin((-90 - nAngleTest + angle_step * i) * 0.0174532925));
					global_sight_point = oKart.localToGlobal(sight_point);
					
					// quitte la boucle en cas de collision prévue du circuit et du kart
					if (oRace.hitTestPoint(global_sight_point.x, global_sight_point.y, true))	
						break;
				}
				
				if (i < nPrecision / 2)	turn_left += j;
				else	turn_left -= j;

				oLineTestRace.graphics.lineTo(sight_point.x, sight_point.y);
			}
			
			// accélération si turn_left est plus petit que la tolerance * 2
			if (nSpeed < nMaxSpeed && Math.abs(turn_left) < nTurnTolerance * 2)
				nSpeed += nAcceleration;
			
			var speed_x : Number = Math.sin(oKart.rotation * 0.0174532925) * nSpeed;
			var speed_y : Number = - Math.cos(oKart.rotation * 0.0174532925) * nSpeed;
			
			oKart.y += speed_y;// mise à jour de la position du kart IA
			oKart.x += speed_x;
			
			var point_left : Point = new Point(-9, 0);
			var point_right : Point = new Point(9, 0);
			var point_front : Point = new Point(0, -13);
			var point_back : Point = new Point(0, 13);
			
			point_left = oKart.localToGlobal(point_left);
			point_right = oKart.localToGlobal(point_right);
			point_front = oKart.localToGlobal(point_front);
			point_back = oKart.localToGlobal(point_back);
			
			// gestion voiture et circuit collision
			if (oRace.hitTestPoint(point_left.x, point_left.y, true) && oRace.hitTestPoint(point_front.x, point_front.y, true))
			{
				oKart.rotation += 5;
				nSpeed *= 0.85;
				bCollision = true;
			}
			
			if (oRace.hitTestPoint(point_right.x, point_right.y, true) && oRace.hitTestPoint(point_front.x, point_front.y, true))
			{
				oKart.rotation -= 5;
				nSpeed *= 0.85;
				bCollision = true;
			}
			
			if (oRace.hitTestPoint(point_front.x, point_front.y, true))
			{
				nSpeed *= 0.55;
				bCollision = true;
			}
			
			if (oRace.hitTestPoint(point_back.x, point_back.y, true))
			{
				nSpeed *= 0.55;
				bCollision = true;
			}
			
			if (!bCollision)
			{
				// tourne à gauche ou à droite selon la collision du kart et des limites du circuit
				if (Math.abs(turn_left) > nTurnTolerance)
				{
					if (turn_left > 0)	oKart.rotation -= rotation_step * (nSpeed / nMaxSpeed);
					else	oKart.rotation += rotation_step * (nSpeed / nMaxSpeed);
				}
			}
			
			if (Math.abs(nSpeed) > 0.3)	nSpeed *= speed_decay;
			else	nSpeed = 0;					
		}

		
		/**
		 * Transtypage du viewComponent en son type actuel.
		 * 
		 */
		protected function get stageV() : Sprite
		{
			return viewComponent as Sprite;
		}

		/**
		 * Notifications attendues.
		 * 
		 */
		override public function listNotificationInterests() : Array
		{
			return [ApplicationFacade.ON_ENTER_FRAME,
					ApplicationFacade.RACE_READY];
		}

		/**
		 * Gestion des notifications.
		 * 
		 */
		override public function handleNotification(note : INotification) : void
		{
			switch (note.getName())
			{
				case ApplicationFacade.RACE_READY:
					oRace = Sprite( note.getBody() );
					this.startGame();
					break;
												
				case ApplicationFacade.ON_ENTER_FRAME:
					if( oRace != null )	this.moveKart();
					break;	
			}
		}

	}
}
			
			

IV. Comment utiliser les conditions if, else et switch en programmation ?

Un autre élément essentiel en programmation est la gestion des conditions.
Apprenez dans cette vidéo, à vous servir des conditions if, else et switch.


Ci-dessous, l'exemple de code.

 
Sélectionnez

/**
  The Initial Developer of the Original Code is
  Matthieu  - http://www.programmation-facile.com/
  Portions created by the Initial Developer are Copyright (C) 2013
  the Initial Developer. All Rights Reserved.

  Contributor(s) :
*/
package application.app.view
{
	import flash.geom.Point;
	
	import flash.display.Sprite;

	import application.app.ApplicationFacade;

	import org.puremvc.as3.interfaces.IMediator;
	import org.puremvc.as3.interfaces.INotification;
	import org.puremvc.as3.patterns.mediator.Mediator;

	/**
	 * Permet de construire notre menu et d'interagir avec nos composants graphiques.
	 * 
	 * @author matth
	 */
	public class ViewKartIA2 extends Mediator implements IMediator
	{
		public static const NAME : String = "ViewKartIA2";// intelligence artificielle
		
		private var oKart : Sprite;
		public var oLineTestRace : Sprite;// ligne de test du circuit	
		private var oRace : Sprite;// référence au clip circuit
				
		/* variables ajustement kart */
		public var speed_decay:Number;
		public var rotation_step:Number;// vitesse de rotation
	
		public var nAcceleration : Number;// accélération du kart
		public var nMaxSpeed : Number;// vitesse maximum du kart
		public var nSpeed : Number;// vitesse du kart
		
		
		public var nAngleTest : Number;// angle pour la ligne de test		
		public var nPrecision : int;// la précision: plus c'est élevée plus c'est précis, et plus lent pour la simulation		
		public var nSizeTest : int;// la longueur pour les tests d'anticipation des collisions	
		public var nNumberSteps : int;// le nombre d'étape requis pour valider les tests		
		public var nTurnTolerance : int;// la tolérance pour tourner

		
		
		public function ViewKartIA2(viewComponent : Object)
		{
			super(NAME, viewComponent);
			this.setupUi();
		}


		/**
		 * Initialisation de l'interface utilisateur.
		 * 
		 */
		private function setupUi() : void
		{
			// création et configuration du kart
			oKart = new KartIA2();
			stageV.addChild(oKart);
			
			oLineTestRace = new Sprite();
			oKart.addChild(oLineTestRace);
		}


		/**
		 * Initialisation des variables pour une nouvelle partie
		 * 
		 */
		private function startGame() : void
		{
			// position de départ du kart
			oKart.x = 450;
			oKart.y = 300;
			oKart.rotation = 0;
			
			nAngleTest = 90;
			nPrecision = 13;
			nSizeTest = 63;
			nNumberSteps = 13;
			nTurnTolerance = 13;
			
			speed_decay = 0.96;
			rotation_step = 13;// vitesse de rotation
			nAcceleration = 0.63;// accélération du kart
			nMaxSpeed = 4,8;// vitesse maximum du kart
			nSpeed = 0;// vitesse du kart
		}

			
		/**
		 * Déplace le kart IA en fonction des tests de collision du circuit.
		 * 
		 */
		private function moveKart() : void
		{
			var angle_step : Number = nAngleTest * 2 / nPrecision;
			var sight_point : Point;
			var global_sight_point : Point;
			
			var turn_left : int = 0;// contient le résultat du test de collision
			var bCollision : Boolean = false;// collision avec le circuit ?
			
			oLineTestRace.graphics.clear();
			oLineTestRace.graphics.lineStyle(1, 0x00C5DF);
			
			// détermine la prochaine trajectoire du kart (test avec les lignes)
			for (var i : int = 0; i <= nPrecision; i++)
			{
				for (var j : int = 1; j <= nNumberSteps; j++)
				{
					oLineTestRace.graphics.moveTo(0, -15);
					sight_point = new Point(nSizeTest / nNumberSteps * j * Math.cos((-90 - nAngleTest + angle_step * i) * 0.0174532925), nSizeTest / nNumberSteps * j * Math.sin((-90 - nAngleTest + angle_step * i) * 0.0174532925));
					global_sight_point = oKart.localToGlobal(sight_point);
					
					// quitte la boucle en cas de collision prévue du circuit et du kart
					if (oRace.hitTestPoint(global_sight_point.x, global_sight_point.y, true))	
						break;
				}
				
				if (i < nPrecision / 2)	turn_left += j;
				else	turn_left -= j;

				oLineTestRace.graphics.lineTo(sight_point.x, sight_point.y);
			}
			
			// accélération si turn_left est plus petit que la tolerance * 2
			if (nSpeed < nMaxSpeed && Math.abs(turn_left) < nTurnTolerance * 2)
				nSpeed += nAcceleration;
			
			var speed_x : Number = Math.sin(oKart.rotation * 0.0174532925) * nSpeed;
			var speed_y : Number = - Math.cos(oKart.rotation * 0.0174532925) * nSpeed;
			
			oKart.y += speed_y;// mise à jour de la position du kart IA
			oKart.x += speed_x;
			
			var point_left : Point = new Point(-9, 0);
			var point_right : Point = new Point(9, 0);
			var point_front : Point = new Point(0, -13);
			var point_back : Point = new Point(0, 13);
			
			point_left = oKart.localToGlobal(point_left);
			point_right = oKart.localToGlobal(point_right);
			point_front = oKart.localToGlobal(point_front);
			point_back = oKart.localToGlobal(point_back);
			
			// gestion voiture et circuit collision
			if (oRace.hitTestPoint(point_left.x, point_left.y, true) && oRace.hitTestPoint(point_front.x, point_front.y, true))
			{
				oKart.rotation += 5;
				nSpeed *= 0.85;
				bCollision = true;
			}
			
			if (oRace.hitTestPoint(point_right.x, point_right.y, true) && oRace.hitTestPoint(point_front.x, point_front.y, true))
			{
				oKart.rotation -= 5;
				nSpeed *= 0.85;
				bCollision = true;
			}
			
			if (oRace.hitTestPoint(point_front.x, point_front.y, true))
			{
				nSpeed *= 0.55;
				bCollision = true;
			}
			
			if (oRace.hitTestPoint(point_back.x, point_back.y, true))
			{
				nSpeed *= 0.55;
				bCollision = true;
			}
			
			if (!bCollision)
			{
				// tourne à gauche ou à droite selon la collision du kart et des limites du circuit
				if (Math.abs(turn_left) > nTurnTolerance)
				{
					if (turn_left > 0)	oKart.rotation -= rotation_step * (nSpeed / nMaxSpeed);
					else	oKart.rotation += rotation_step * (nSpeed / nMaxSpeed);
				}
			}
			
			if (Math.abs(nSpeed) > 0.3)	nSpeed *= speed_decay;
			else	nSpeed = 0;					
		}

		
		/**
		 * Transtypage du viewComponent en son type actuel.
		 * 
		 */
		protected function get stageV() : Sprite
		{
			return viewComponent as Sprite;
		}

		/**
		 * Notifications attendues.
		 * 
		 */
		override public function listNotificationInterests() : Array
		{
			return [ApplicationFacade.ON_ENTER_FRAME,
					ApplicationFacade.RACE_READY];
		}

		/**
		 * Gestion des notifications.
		 * 
		 */
		override public function handleNotification(note : INotification) : void
		{
			switch (note.getName())
			{
				case ApplicationFacade.RACE_READY:
					oRace = Sprite( note.getBody() );
					this.startGame();
					break;
												
				case ApplicationFacade.ON_ENTER_FRAME:
					if( oRace != null )	this.moveKart();
					break;	
			}
		}

	}
}

			

V. Comment éviter les erreurs fatales dans vos applications ?

Dans cette vidéo, apprenez à gérer les erreurs, qu'elles soient due à un problème de code ou à une mauvaise manipulation de l'utilisateur.
Avec les exceptions, vous ou vos utilisateurs, saurez rapidement comment les résoudre avec un message clair.


Ci-dessous, la classe AppliError.

 
Sélectionnez

/**

  The Initial Developer of the Original Code is
  Matthieu  - http://www.programmation-facile.com/
  Portions created by the Initial Developer are Copyright (C) 2013
  the Initial Developer. All Rights Reserved.

  Contributor(s) :

 */
package
{
	import flash.geom.Point;
	import flash.display.DisplayObject;
	import com.actionscriptfacile.ui.text.UITextField;
	
	
	/**
	 * Personnalisation des erreurs.
	 * 
	 * @author Matthieu
	 */
	public class AppliError extends Error
	{
		
		public function AppliError(message : * = "", id : * = 0)
		{
			super(message, id);
		}



		/**
		 * Affiche le message d'erreur 
		 * en conservant la charte graphique de notre application.
		 * 
		 */
		public function showError(oPoint:Point) : DisplayObject
		{
			var oText:UITextField = this.addText( "---> ERREUR : "+message, oPoint);
			
			return oText;
		}

		
						
		/**
		 * Création d'un champ texte.
		 * 
		 */
		private function addText(sValue:String, oPoint:Point) : UITextField
		{
			var oTxtField:UITextField = new UITextField();
			oTxtField.text = sValue;
			oTxtField.selectable = true;
			oTxtField.multiline = true;// plusieurs lignes dans le champ texte
			oTxtField.autoSizeLeft();
			
			/* Passage par référence  */
			var oCoord:Point = oPoint;// dans ce cas là, les coordonnées de oPoint sont passées comme une référence à l'objet oCoord
			oTxtField.x = oCoord.x;// les textes sont les uns sous les autres
			oTxtField.y = oCoord.y;
			oCoord.y += 50;// modifie donc les valeurs de oPoint
			
			
			oTxtField.maxHeight = oTxtField.height = 100;
			
			oTxtField.background = true;
			oTxtField.backgroundColor = 0x006f77;
			
			oTxtField.changeFormat("size", 28);// changement de la taille de la police du texte
			oTxtField.changeFormat("font", "Arial");// changement de la taille de la police du texte
			oTxtField.changeFormat("color", Math.random()*0xffffff);// changement de la couleur
			
			return oTxtField;	 
		}
	}
}
					
			

Ci-dessous, un exemple permettant de capturer les erreurs.

 
Sélectionnez

/**

  The Initial Developer of the Original Code is
  Matthieu  - http://www.programmation-facile.com/
  Portions created by the Initial Developer are Copyright (C) 2013
  the Initial Developer. All Rights Reserved.

  Contributor(s) :

 */
package 
{
	import flash.display.DisplayObject;
	import flash.geom.Point;
	import com.as3facile.DefaultButton;
	import flash.events.MouseEvent;

	import com.actionscriptfacile.ui.text.UITextField;

	
	import flash.display.Sprite;
	import flash.events.Event;

	import com.demonsters.debugger.MonsterDebugger;


	/**
	 * Exemple d'utilisation Singleton et Display Object.
	 * 
	 * 
	 * @author Matthieu
	 */
	public class MainException extends Sprite
	{		
		private var oPointXY:Point;// position du champ texte
		
		
		public function MainException() 
		{
			// 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.
		 * 
		 */
		protected function onReady(event : Event) : void
		{
			this.removeEventListener(Event.ADDED_TO_STAGE, onReady);
			
			// Init De MonsterDebugger
            MonsterDebugger.initialize(this);
            MonsterDebugger.trace(this, "test classe point");		
			
																
			// construction de la page
			this.setupUI();	
			
			this.erreurCapture();
		}




		/**
		 * Capture des erreurs pendant l'exécution de l'application.
		 * 
		 */
		private function erreurCapture() : void
		{
			var aTableauVide:Array;
			//var aTableauVide:Array = new Array();// écriture correcte
			
			try
			{
				aTableauVide.push("Bonjour");	
			}
			catch(error:Error)
			{
				MonsterDebugger.trace(this, "L'objet tableau n'a pas été initialisé ! "+error.message);// affiche le message et continue l'exécution du code	
			}
			finally
			{
				MonsterDebugger.trace(this, "Instruction exécutée dans tous les cas ;)");	
			}
			
			// personnalisation des messages d'erreurs
			try 
            { 
                if ( !aTableauVide ) 
                { 
                    throw new Error("Le tableau n'a pas été initialisé");// envoie ce message à catch 
                } 
				aTableauVide.push("Bonjour");	
            }  
            catch (error:Error) 
            {
				var oText:UITextField = this.addText( "ERREUR : "+error.message, oPointXY);
				this.addChild(oText);
            } 
			
			
			// personnalisation des erreurs
			try 
            { 
                if ( !aTableauVide ) 
                { 
                    throw new AppliError("Err perso : Tableau vide !");// envoie ce message à catch 
                } 
				aTableauVide.push("Bonjour");	
            }  
            catch (error:AppliError) 
            {
				var oTextError:DisplayObject = error.showError(oPointXY);
				this.addChild(oTextError);
            } 			
			
		}
		
		
		
		/**
		 * Création d'un bouton.
		 * 
		 */
		private function setupUI():void
		{
			oPointXY = new Point(10, 50);
			
			var oBtnStart:DefaultButton = new DefaultButton();
			oBtnStart.getObject().label = "Gooo !";
			oBtnStart.getObject().x = 230;
			oBtnStart.getObject().y = 10;
			oBtnStart.getObject().addEventListener ( MouseEvent.CLICK, onAddText );
			this.addChild(oBtnStart);	
			

		}
		
		
		/**
		 * Lance l'affichage des interfaces avec le debug.
		 * 
		 */
		private function onAddText(event : MouseEvent) : void
		{
			var oText:UITextField = this.addText( "Du texte en exemple...", oPointXY);
			this.addChild(oText);
			
			
			// le texte de debug par dessus tout le reste
			var oTextDebug:UITextField = this.addText( "Coucou, c'est moi le debug !", oPointXY);
			this.addChild(oTextDebug);
			
			// un autre texte
			var oTextAutre:UITextField = this.addText( "Et encore un texte.", oPointXY);
			this.addChild(oTextAutre);

		}
		
				
		/**
		 * Création d'un champ texte.
		 * 
		 */
		private function addText(sValue:String, oPoint:Point) : UITextField
		{
			var oTxtField:UITextField = new UITextField();
			oTxtField.text = sValue;
			oTxtField.selectable = true;
			oTxtField.multiline = true;// plusieurs lignes dans le champ texte
			oTxtField.autoSizeLeft();
			
			/* Passage par référence  */
			var oCoord:Point = oPoint;// dans ce cas-là, les coordonnées de oPoint sont passées comme une référence à l'objet oCoord
			oTxtField.x = oCoord.x;// les textes sont les uns sous les autres
			oTxtField.y = oCoord.y;
			oCoord.y += 80;// modifie donc les valeurs de oPoint
			
			
			/* passage par copie de valeurs *
			var oCoord:Point = new Point( oPoint.x, oPoint.y);// dans ce cas-là, les coordonnées de oPoint sont passées comme une valeur
			oTxtField.x = oCoord.x;
			oTxtField.y = oCoord.y;// les textes sont empilés les uns sur les autres
			oCoord.y += 80;// modifie donc les valeurs de oCoord
			*/
			
			
			
			oTxtField.maxHeight = oTxtField.height = 100;
			
			oTxtField.background = true;
			oTxtField.backgroundColor = Math.random()*0xffffff;
			
			oTxtField.changeFormat("size", 28);// changement de la taille de la police du texte
			oTxtField.changeFormat("font", "Arial");// changement de la taille de la police du texte
			oTxtField.changeFormat("color", Math.random()*0X006f77);// changement de la couleur
			
			return oTxtField;	 
		}
	
	
	}
}

VI. Comment connaître le type d'une variable ?

En ActionScript vous pouvez connaître le type d'une variable grâce aux opérateurs instanceof, is et as.
Apprenez, dans cette vidéo, à vous en servir.


La classe.

 
Sélectionnez

/**

  The Initial Developer of the Original Code is
  Matthieu  - http://www.programmation-facile.com/
  Portions created by the Initial Developer are Copyright (C) 2013
  the Initial Developer. All Rights Reserved.

  Contributor(s) :

 */
package 
{
	import flash.events.IEventDispatcher;
	import flash.display.DisplayObject;
	import flash.geom.Point;
	import com.as3facile.DefaultButton;
	import flash.events.MouseEvent;

	import com.actionscriptfacile.ui.text.UITextField;

	
	import flash.display.Sprite;
	import flash.events.Event;

	import com.demonsters.debugger.MonsterDebugger;


	/**
	 * Exemple d'utilisation Singleton et Display Object.
	 * 
	 * 
	 * @author Matthieu
	 */
	public class MainInstance extends Sprite
	{		
		private var oPointXY:Point;// position du champ texte
		
		
		public function MainInstance() 
		{
			// 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.
		 * 
		 */
		protected function onReady(event : Event) : void
		{
			this.removeEventListener(Event.ADDED_TO_STAGE, onReady);
			
			// Init De MonsterDebugger
            MonsterDebugger.initialize(this);
            MonsterDebugger.trace(this, "test classe point");		
			
																
			// construction de la page
			this.setupUI();	
			
			this.testInstance();
		}


		
		/**
		 * Opérateur instanceof
		 * Permet de savoir si un objet est une instance de telle ou telle classe.
		 * 
		 */
		private function testInstance() : void
		{
			var oSprite:Sprite = new Sprite(); 
			
			// prise en compte de l'héritage et interface
			
			// avec is
			MonsterDebugger.trace(this, "instanceof Sprite :"); // true 
			MonsterDebugger.trace(this, oSprite is Sprite); // true 
			
			MonsterDebugger.trace(this,"instanceof DisplayObject :");// true 
			MonsterDebugger.trace(this,oSprite is DisplayObject);// true 
			
			MonsterDebugger.trace(this,"instanceof IEventDispatcher :"); // true
			MonsterDebugger.trace(this,oSprite is IEventDispatcher); // true
			
			MonsterDebugger.trace(this,"instanceof Number :"); // false
			MonsterDebugger.trace(this,oSprite is Number); // false
			
			// avec as
			MonsterDebugger.trace(this, "as Sprite :"); // object Sprite
			MonsterDebugger.trace(this, oSprite as Sprite); // object Sprite
			
			MonsterDebugger.trace(this,"as DisplayObject :");// object Sprite
			MonsterDebugger.trace(this,oSprite as DisplayObject);// object Sprite
			
			MonsterDebugger.trace(this,"as IEventDispatcher :"); // null
			MonsterDebugger.trace(this, oSprite as Number); // null
			
			/*
			trace(oSprite is Sprite); // true 
			trace(oSprite is DisplayObject);// true - héritage
			trace(oSprite is IEventDispatcher);// true - interface
			trace(oSprite is Number); // false
			
			trace(oSprite as Sprite); // object Sprite
			trace(oSprite as DisplayObject);// object Sprite
			trace(oSprite as Number); // null
			 */
		}


		/**
		 * Création d'un bouton.
		 * 
		 */
		private function setupUI():void
		{
			oPointXY = new Point(10, 50);
			
			var oBtnStart:DefaultButton = new DefaultButton();
			oBtnStart.getObject().label = "Gooo !";
			oBtnStart.getObject().x = 230;
			oBtnStart.getObject().y = 10;
			oBtnStart.getObject().addEventListener ( MouseEvent.CLICK, onAddText );
			this.addChild(oBtnStart);	
			

		}
		
		
		/**
		 * Lance l'affichage des interfaces avec le debug.
		 * 
		 */
		private function onAddText(event : MouseEvent) : void
		{
			var oText:UITextField = this.addText( "Du texte en exemple...", oPointXY);
			this.addChild(oText);
			
			
			// le texte de debug par dessus tout le reste
			var oTextDebug:UITextField = this.addText( "Coucou, c'est moi le debug !", oPointXY);
			this.addChild(oTextDebug);
			
			// un autre texte
			var oTextAutre:UITextField = this.addText( "Et encore un texte.", oPointXY);
			this.addChild(oTextAutre);

		}
		
				
		/**
		 * Création d'un champ texte.
		 * 
		 */
		private function addText(sValue:String, oPoint:Point) : UITextField
		{
			var oTxtField:UITextField = new UITextField();
			oTxtField.text = sValue;
			oTxtField.selectable = true;
			oTxtField.multiline = true;// plusieurs lignes dans le champ texte
			oTxtField.autoSizeLeft();
			
			/* Passage par référence  */
			var oCoord:Point = oPoint;// dans ce cas là, les coordonnées de oPoint sont passées comme une référence à l'objet oCoord
			oTxtField.x = oCoord.x;// les textes sont les uns sous les autres
			oTxtField.y = oCoord.y;
			oCoord.y += 80;// modifie donc les valeurs de oPoint
			
			
			/* passage par copie de valeurs *
			var oCoord:Point = new Point( oPoint.x, oPoint.y);// dans ce cas-là, les coordonnées de oPoint sont passées comme une valeur
			oTxtField.x = oCoord.x;
			oTxtField.y = oCoord.y;// les textes sont empilés les uns sur les autres
			oCoord.y += 80;// modifie donc les valeurs de oCoord
			*/
			
			
			
			oTxtField.maxHeight = oTxtField.height = 100;
			
			oTxtField.background = true;
			oTxtField.backgroundColor = Math.random()*0xffffff;
			
			oTxtField.changeFormat("size", 28);// changement de la taille de la police du texte
			oTxtField.changeFormat("font", "Arial");// changement de la taille de la police du texte
			oTxtField.changeFormat("color", Math.random()*0X006f77);// changement de la couleur
			
			return oTxtField;	 
		}
	
	
	}
}				
			

VII. Comment découpler vos classes, les rendre indépendantes ?

Dans cette vidéo, apprenez à vous servir des interfaces pour simplifier vos classes.


L'interface IContainer :

 
Sélectionnez

/**
 * 
 * Le Framework de Composants AS3 de la Formation AS3 Facile
 * Développé par Matthieu est mis à disposition
 * selon les termes de la licence Creative Commons Paternité - 
 * Partage des Conditions Initiales à l'Identique 3.0 Unported.
 * 
 * Licensed under the CREATIVE COMMONS, Version 3;
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://creativecommons.org/licenses/by-sa/3.0/
 * 
 * This program comes with ABSOLUTELY NO WARRANTY.
 * 
 * The Initial Developer of the Original Code is
 * Matthieu -- www.formation-actionscript.com -- matthieu@actionscript-facile.com
 * Framework AS3 Facile Copyright (C) 2010 Matthieu
 * 
 */
package com.formation_actionscript.ui 
{
	import flash.display.MovieClip;
	
	/**
	 * All objects than implement IContainer must have all this function.
	 * 
	 */
	public interface IContainer 
	{
		function getDisplayed() : Boolean ;
		
		function move(nX : Number = NaN, nY : Number = NaN) : void 
		
		function setHeight(iHeight : Number) : void 
		function getHeight() : Number 
		
		function setWidth(iWidth : Number) : void 
		function getWidth() : Number 
		
		function getPosition() : Object ;
		
		function getMovieClip() : MovieClip ;
		
		function remove() : Boolean ;
		function destruct() : Boolean ;
		function toString() : String ;
	}
}
					
			

Exemple d'interface IFactoryIngredientsPizza :

 
Sélectionnez

/**

  The Initial Developer of the Original Code is
  Matthieu  - http://www.programmation-facile.com/
  Portions created by the Initial Developer are Copyright (C) 2013
  the Initial Developer. All Rights Reserved.

  Contributor(s) :

 */
package fabriquepizza.fabriqueingredients
{

	import fabriquepizza.ingredients.Fromage;
	import fabriquepizza.ingredients.Legumes;
	import fabriquepizza.ingredients.Moules;
	import fabriquepizza.ingredients.Pate;
	import fabriquepizza.ingredients.Poivrons;
	import fabriquepizza.ingredients.Sauce;
	
	
	/**
	 * @author Matthieu
	 * Interface pour la fabrication qui va créer toutes nos garnitures de pizza.
	 * Tout ce qu'il nous faut pour confectionner une pizza.
	 * 
	 */
	public interface IFactoryIngredientsPizza 
	{
		function creerPate() : Pate;

		function creerSauce() : Sauce;

		function creerFromage() : Fromage;

		function creerLegumes() : Legumes;

		function creerPoivrons() : Poivrons;

		function creerMoules() : Moules;
	}
}

VIII. Recevez gratuitement la formation "Développement Facile"

Si vous souhaitez aller plus loin dans le développement informatique,
vous pouvez recevoir gratuitement la formation "Développement Facile" avec des cours pas à pas, accompagnés de codes source commentés.
Ainsi, vous progressez à votre rythme, avec un suivi personnalisé et individuel. Vous avez la possibilité de poser toutes vos questions techniques à la fin de chaque cours.
Cliquez simplement ici pour recevoir la formation Développement Facile Cliquez simplement ici pour recevoir gratuitement la formation "Développement Facile"Cliquez simplement ici pour recevoir gratuitement la formation Développement Facile

IX. Remerciements

Merci beaucoup à l'équipe de rédaction de Developpez.com de contribuer à la diffusion de ce tutoriel.
J'adresse également un merci tout particulier à Jacques Jeanjacques_jean pour sa relecture orthographique.