Créer son site Gratuitement : Service / Outils webmaster gratuit
Mon Site Gratuit
Contactez nous
Nos partenaires
Scripts
Tutoriaux
Nos services
Forums
Accueil
ForumsCS3|AS3 : Manipuler les Containers : Class Rectangle | Point
      Imprimer le sujet FAQ  M'enregistrer 
  Grâce aux fichier Flash, votre site devient 100% interactif !
Des cours pour savoir gérer les ActionsScripts, les interpolations ...ect ...

CS3|AS3 : Manipuler les Containers : Class Rectangle | Point

Messagede zardoz le 10 Mar 2008, 08:24



Manipuler les conteneurs avec la classe Rectangle

Prenez conscience que ce post fait suite aux trois premiers tutos écrit sur l'importance des Containers. En effet car le source que je vous fournis concernent encore un fois les Containers. Par contre avec ce tuto, nous commencerons à manipuler ces conteneurs avec les objets instanciés issus du package flash.geom et de la classe Rectangle, joint à la méthode union(). Mais il est important ici de reconnaitre la suite des trois premiers tutos sur le sujet des Containers. Le premier source de ce tuto est fort détaillé. Par le fait même, vous pourrez le copier/coller et/ou l'écrire tout simplement.

:: voici donc quelques consignent de base concernant la dimension et la couleur du stage

:: Dimension du stage : Largeur : 625px :: Hauteur :810px. <= Important
:: Couleur du stage : Black :: Pour une optimisation des effets de filtres. <= Important.
:: Placer le source sur le premier keyframe du root. <= Important.
:: Prenez l'habitude de ne pas enlever les lignes de commentaires :: Car c'est la seule façon de nous communiquer correctement
:: des numéros de lignes et de retracer rapidement la partie du source.

:: Voici le source ::



:: Quoique le source soit très large en écriture, celui-ci est fort détaillé et très aéré, ce qui augmente le nombres de lignes.
:: Mais conservez le comme tel. Sait-on jamais, peut-être aurons nous à communiquer via ce tuto, pour quelques exercices utiles.

:: La ligne 10, 11 et 15 sont important :: C'est à ces lignes que nous instancions les objets de la classe Rectangle.
:: À plus forte raison à la ligne 15 :: Car c'est à cette ligne qu'un nouvel objet utilise la méthode union().


Code: Tout sélectionner
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.geom.Rectangle;
import flash.events.MouseEvent;
import flash.filters.BlurFilter;
import flash.filters.DropShadowFilter;
// --
// -- Construisons 3 objets Rectangle -- 'r1' et 'r2' et 'r3' --
// --
var r1:Rectangle = new Rectangle(0, 0, 300, 200);
var r2:Rectangle = new Rectangle(0, 0, 600, 400);
// --
// -- 'r3' contiens l'union des 2 premiers objets 'r1' et 'r2' --
// --
var r3:Rectangle = r1.union(r2);
// --
// -- Construisons nos fonctions de traçage d'information --
// --
function traceInfosRectangles ():void
{
   // -- traçons nos objets d'origines de la classe Rectangle --
   trace ("Premier objet Rectangle :: r1 = " + r1);
   trace ("Deuxième objet Rectangle :: r2 = " + r2);
   trace ("Troisième objet Rectangle :: r3 = " + r3);
}
function traceInfosVisuels ():void
{
   trace ("N'oubliez pas que 'v' est à x=0 et y=0 de son conteneur parent : 'conteneur1'");
   trace ("Les données d'origine de 'v'\n" + v.x + " " + v.y + " " + v.width + " " + v.height);
   trace ("La forme 'v2' :\n" + v2.x + " " + v2.y + " " + v2.width + " " + v2.height);
}
function traceInfosConteneurs ():void
{
   trace (baseConteneur.name + "\n" + baseConteneur.x + " " + baseConteneur.y + " " + baseConteneur.width + " " + baseConteneur.height);
   trace ("N'oubliez pas que conteneur1 est à x=0 et y=0 de son conteneur parent : 'baseConteneur'");
   trace (conteneur1.name + "\n" + conteneur1.x + " " + conteneur1.y + " " + conteneur1.width + " " + conteneur1.height);
}
function traceInfosGlobal():void
{
   trace ("----------------------------------------------------------------------");
   trace ("C'est le 'conteneur1' qui est cibler par le programme ici".toUpperCase());
   trace ("C'est cet objet qui se nourrit des données de 'r3' créé avec la classe Rectangle");
   trace ("----------------------------------------------------------------------");
   trace ("Les nouvelles données après l'action utilisateur");
   trace ("N'oubliez pas que 'conteneur1' est à x=0 et y=0 de son conteneur parent : 'baseConteneur'");
   trace ("Les données d'arrivé de 'conteneur1' = les données d'origine de 'r3'");
   trace ("Tandis que 'r3' est l'union des données d'origine de 'r1' et 'r2'");
   trace ("La forme 'v' changera de dimension. Cependant celle-ci ne transmet pas ses nouvelles dimensions :\n" + v.x + " " + v.y + " " + v.width + " " + v.height);
   trace ("La forme 'v2' changera de dimension. Cependant celle-ci ne transmet pas ses nouvelles dimensions :\n" + v2.x + " " + v2.y + " " + v2.width + " " + v2.height);
   trace (baseConteneur.name + " : transmet ses nouvelles dimensions.\n" + baseConteneur.x + " " + baseConteneur.y + " " + baseConteneur.width + " " + baseConteneur.height);
   trace (conteneur1.name + " : transmet ses nouvelles dimensions.\n" + conteneur1.x + " " + conteneur1.y + " " + conteneur1.width + " " + conteneur1.height);   
}
// --
// -- Déclaration des variables utiles et initialisé --
// --
var baseConteneur:Sprite = new Sprite();
var conteneur1:Sprite = new Sprite();
baseConteneur.name = 'Conteneur de base';
conteneur1.name = 'Conteneur 1';
// --
// -- Placons les dans un DisplayObjectContainers --
// --
addChild (baseConteneur);
baseConteneur.addChild (conteneur1);
// --
// -- Faisons des variables pour un visuel --
// --
var ligneGrosseur:Number = 1.0;
var ligneCouleur:uint = 0xFFFFFF;
var fillCouleur:uint = 0x660000;
var trans:Number = 1;
var posx:Number = 0;
var posy:Number = 0;
var largeur:Number = r1.width;
var hauteur:Number = r1.height;
// --
// -- Construisons le visuel en question --
// --
var v:MovieClip = new MovieClip();
v.graphics.lineStyle (ligneGrosseur, ligneCouleur, trans);
v.graphics.beginFill (fillCouleur, trans);
v.graphics.drawRect (posx, posy, largeur, hauteur);
// --
// -- Création d'un autre objet visuel placer aussi dans 'conteneur1' --
// --
var v2:MovieClip = new MovieClip();
v2.graphics.lineStyle (1, 0xFF0000, 1);
v2.graphics.beginFill (0x333333, 1);
v2.graphics.drawRect (posx + 10, posy + 10, largeur - 20, hauteur - 20);
conteneur1.addChild (v2);
// --
// -- Appelle des fonctions --
// --
traceInfosRectangles ();
traceInfosVisuels ();
// --
// -- Placons notre visuel 'v' et 'v2' dans conteneur1 --
// --
conteneur1.addChild (v);
conteneur1.addChild (v2);
// --
// -- Construisons le filtre --
// --
var flou:BlurFilter = new BlurFilter();
var matrice:Array = [];
flou.blurX = 24;
flou.blurY = 0;
// --
// -- Placons l'objet filtre dans la matrice --
// --
matrice = [flou];
// --
// -- Activation du filtre à l'objet visuel 'v' --
// --
v.filters = matrice;
// --
// -- Deuxième objet filter -- ajouter à 'v2' --
// --
var ombrage:DropShadowFilter = new DropShadowFilter();
var matrice2:Array = [];
ombrage.angle = 45;
ombrage.distance = 5;
ombrage.blurX = 8;
ombrage.blurY = 8;
ombrage.color = 0x000000;
ombrage.alpha = 0.6;
matrice2 = [ombrage];
v2.filters = matrice2;
// --
// -- Positionnons en 'x' et en 'y' le conteneur de base --
// --
baseConteneur.x = 13;
baseConteneur.y = 10;
// --
// -- Appelle de la fonction traceInfosConteneurs() --
// --
traceInfosConteneurs();
// --
// -- La classe Rectangle du package flash.geom --
// -- Cette classe servira lors d'une action utilisateur --
// --
trace ("Nous attacherons les données de 'r3' au 'conteneur1' selon une action utilisateur");
trace ("Cette action utilisateur 'cliquable' utilisera une méthode de la classe 'Rectangle' nommé : union();");
// --
// -- Construisons un écouteur souris sur le visuel (v) --
// -- Nous pouvons positionner l'écouteur sur n'importe lequel des objets --
// -- Ici le choix porte sur 'conteneur1' --
// --
conteneur1.addEventListener (MouseEvent.CLICK, actionClick);
conteneur1.buttonMode = true;
// --
// -- Écrivons la fonction nommé : 'actionClick' --
// --
function actionClick (event:MouseEvent):void
{
   conteneur1.x = r3.x;
   conteneur1.y = r3.y;
   conteneur1.width = r3.width;
   conteneur1.height = r3.height;
   conteneur1.buttonMode = false;
   conteneur1.removeEventListener (MouseEvent.CLICK, actionClick);
   // --
   // -- Appelle de la fonction traceInfosGeneral() --
   // --
   traceInfosGlobal();

}

:: Date de mise en site : 10 Mars 2008::
:: Dernière modification : 10 Mars 2008 ::


Prenez le temps de vous familiarisé au source

Un peu plus haut, si vous avez pris le temps de lire l'article, je vous parlais de la subtilité de la classe Rectangle joint à la méthode union(). De plus je vous disais que ' x ' est l'équivalent de ' width ', et que ' y ' est l'équivalent de ' height '. Pour mieux comprendre ce principe, je vous largue ici même un exercice que vous pourrez faire dans l'immédiat. Cet exercice, fort simple, nous déroute un peu lorsque c'est la première fois que nous manipulons des Containers via la classe Rectangle et sa méthode union(). En effet puisque nous sommes confrontés, à la subtilité de l'objet et de son comportement.

C'est au travers un écouteur nommé ' actionClick ' que nous déclenchons le transfert entre les données d'origines et les données d'arrivés. Les objets Rectangle n'ont en principe de réels intérêts que lors du transfert de l'objet visuel de son format d'origine au format d'arrivé. C'est là et là seulement que nous trouverons l'importance des données stocker dans les objets ' r1 ', ' r2 ', et ' r3' en particulier.

Si donc vous désirez manipuler de nouvelles valeurs aux objets de la classe Rectangle, vous le ferez comme ces quelques consignent que voici. Je vous le suggère fortement. Manipuler une par une toutes les données des objets et laissé actif l'action trace(). Surtout, observez les résultats visuels

Sachez d'abord et avant tout que la forme visuelle, une fois cliquer, prend la largeur du Flash Player. Par le fait même vous comprenez qu'il deviens inutile de jouer avec les valeurs ' x ' des objets ' r1 ' et ' r2 ' situer aux lignes 10 et 11 du source. À moins de changer la dimension de la scène. N'oubliez pas que ' x ' est l'équivalent de ' width '. Par contre il en est différemment des valeurs ' y ' des objets ' r1 ' et ' r2 ', puisque le Player a un hauteur suffisante pour manipuler cette valeur.

:: Exemple ::
:: Ligne 11 :: var r2:Rectangle = new Rectangle(0, 0, 600, 400); // -- param1: x, param2: y, param3: largeur, param4: hauteur

:: Changer le param2 : ' y ' , de l'objet ' r2 ' à la ligne 11.

:: Exemple ::
:: Ligne 11 :: var r2:Rectangle = new Rectangle(0, 100, 600, 400); // -- Changement de la valeur de param2: y

Comme vous pouvez le constater, en changant la valeur de ' y ', donc la position de l'objet, vous avez eu comme résultat un agrandissement en hauteur, donc en ' height ', de l'objet visuel. Dans la vérité du programme, vous avez tout simplement changé la position ' y ' de ' r2 '. Mais le transfert des données d'origine de l'objet visuel, vers les données d'arrivées de ce même objet, ne concerne que le troisième objet nommé ' r3 '. C'est cet objet de la classe Rectangle qui utilise la méthode union(). Il a pour objectif de joindre en une seule forme rectangulaire l'objet ' r1 ' et l'objet ' r2 '. L'objet ' r3 ' porte les nouvelles valeurs des données d'arrivées. Évidemment plus loin dans le programme, l'objet ' conteneur1 ', utilisera ces nouvelles données en s'appropriant l'objet ' r3 ', de la ligne 156 à 159. Ces lignes font partie de la fonction qui définit le transfert des données d'origines vers les nouvelles données déjà stocker dans l'objet ' r3 '. L'action utilisateur, en un clique dans la zone du conteneur, déclenche le tranfert des données en attente.


:: Voici le même code que celui du haut avec cette différence que c'est L'objet ' v ' qui est cibler par le programme.
:: Vous verrez des différences d'informations au Output Panel.
:: De plus, observez bien l'objet visuel ' v2 '.

:: Conserver les mêmes consignent conscernant le stage

:: Dimension du stage : Largeur : 625px :: Hauteur : 810px.
:: Stage Color :: black
:: Placer le source au premier keyframe du root.
:: ctrl + enter.

Code: Tout sélectionner
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.geom.Rectangle;
import flash.events.MouseEvent;
import flash.filters.BlurFilter;
import flash.filters.DropShadowFilter;
// --
// -- Construisons 3 objets Rectangle -- 'r1' et 'r2' et 'r3' --
// --
var r1:Rectangle = new Rectangle(0, 0, 300, 200); // -- Valeur de ' y ' maximale 590px
var r2:Rectangle = new Rectangle(0, 0, 300, 600); // -- Valeur de ' y ' maximale 390px
// --
// -- 'r3' contiens l'union des 2 premiers objets 'r1' et 'r2' --
// --
var r3:Rectangle = r1.union(r2);
// --
// -- Construisons nos fonctions de traçage d'information --
// --
function traceInfosRectangles ():void
{
   // -- traçons nos objets d'origines de la classe Rectangle --
   trace ("Premier objet Rectangle :: r1 = " + r1);
   trace ("Deuxième objet Rectangle :: r2 = " + r2);
   trace ("Troisième objet Rectangle :: r3 = " + r3);
}
function traceInfosVisuels ():void
{
   trace ("N'oubliez pas que 'v' est à x=0 et y=0 de son conteneur parent : 'conteneur1'");
   trace ("Les données d'origine de 'v'\n" + v.x + " " + v.y + " " + v.width + " " + v.height);
   trace ("La forme 'v2' :\n" + v2.x + " " + v2.y + " " + v2.width + " " + v2.height);
}
function traceInfosConteneurs ():void
{
   trace (baseConteneur.name + "\n" + baseConteneur.x + " " + baseConteneur.y + " " + baseConteneur.width + " " + baseConteneur.height);
   trace ("N'oubliez pas que conteneur1 est à x=0 et y=0 de son conteneur parent : 'baseConteneur'");
   trace (conteneur1.name + "\n" + conteneur1.x + " " + conteneur1.y + " " + conteneur1.width + " " + conteneur1.height);
}
function traceInfosGlobal():void
{
   trace ("----------------------------------------------------------------------");
   trace ("C'est le 'conteneur1' qui est cibler par le programme ici".toUpperCase());
   trace ("C'est cet objet qui se nourrit des données de 'r3' créé avec la classe Rectangle");
   trace ("----------------------------------------------------------------------");
   trace ("Les nouvelles données après l'action utilisateur");
   trace ("N'oubliez pas que 'conteneur1' est à x=0 et y=0 de son conteneur parent : 'baseConteneur'");
   trace ("Les données d'arrivé de 'conteneur1' = les données d'origine de 'r3'");
   trace ("Tandis que 'r3' est l'union des données d'origine de 'r1' et 'r2'");
   trace ("La forme 'v' changera de dimension. Et transmet ses nouvelles dimensions :\n" + v.x + " " + v.y + " " + v.width + " " + v.height);
   trace ("La forme 'v2' Ne changera pas de dimension :\n" + v2.x + " " + v2.y + " " + v2.width + " " + v2.height);
   trace (baseConteneur.name + " : transmet ses nouvelles dimensions.\n" + baseConteneur.x + " " + baseConteneur.y + " " + baseConteneur.width + " " + baseConteneur.height);
   trace (conteneur1.name + " : transmet ses nouvelles dimensions.\n" + conteneur1.x + " " + conteneur1.y + " " + conteneur1.width + " " + conteneur1.height);   
}
// --
// -- Déclaration des variables utiles et initialisé --
// --
var baseConteneur:Sprite = new Sprite();
var conteneur1:Sprite = new Sprite();
baseConteneur.name = 'Conteneur de base';
conteneur1.name = 'Conteneur 1';
// --
// -- Placons les dans un DisplayObjectContainers --
// --
addChild (baseConteneur);
baseConteneur.addChild (conteneur1);
// --
// -- Faisons des variables pour un visuel --
// --
var ligneGrosseur:Number = 1.0;
var ligneCouleur:uint = 0xFFFFFF;
var fillCouleur:uint = 0x999999;
var trans:Number = 1;
var posx:Number = 0;
var posy:Number = 0;
var largeur:Number = 300;
var hauteur:Number = 200;
// --
// -- Costruisons le visuel en question --
// --
var v:MovieClip = new MovieClip();
v.graphics.lineStyle (ligneGrosseur, ligneCouleur, trans);
v.graphics.beginFill (fillCouleur, trans);
v.graphics.drawRect (posx, posy, largeur, hauteur);
// --
// -- Création d'un autre objet visuel placer aussi dans 'conteneur1' --
// --
var v2:MovieClip = new MovieClip();
v2.graphics.lineStyle (1, 0xFF0000, 1);
v2.graphics.beginFill (0x666666, 1);
v2.graphics.drawRect (posx + 12, posy + 10, largeur - 25, hauteur - 45);
conteneur1.addChild (v2);
// --
// -- Appelle des fonctions --
// --
traceInfosRectangles ();
traceInfosVisuels ();
// --
// -- Placons notre visuel 'v' et 'v2' dans conteneur1 --
// --
conteneur1.addChild (v);
conteneur1.addChild (v2);
// --
// -- Construisons le filtre --
// --
var flou:BlurFilter = new BlurFilter();
var matrice:Array = [];
flou.blurX = 24;
flou.blurY = 0;
// --
// -- Placons l'objet filtre dans la matrice --
// --
matrice = [flou];
// --
// -- Activation du filtre à l'objet visuel 'v' --
// --
v.filters = matrice;
// --
// -- Deuxième objet filter -- ajouter à 'v2' --
// --
var ombrage:DropShadowFilter = new DropShadowFilter();
var matrice2:Array = [];
ombrage.angle = 45;
ombrage.distance = 5;
ombrage.blurX = 8;
ombrage.blurY = 8;
ombrage.color = 0x000000;
ombrage.alpha = 0.6;
matrice2 = [ombrage];
v2.filters = matrice2;
// --
// -- Positionnons en 'x' et en 'y' le conteneur de base --
// --
baseConteneur.x = 100;
baseConteneur.y = 10;
// --
// -- Appelle de la fonction traceInfosConteneurs() --
// --
traceInfosConteneurs();
// --
// -- La classe Rectangle du package flash.geom --
// -- Cette classe servira lors d'une action utilisateur --
// --
trace ("Nous attacherons les données de 'r3' au 'conteneur1' selon une action utilisateur");
trace ("Cette action utilisateur 'cliquable' utilisera une méthode de la classe 'Rectangle' nommé : union();");
// --
// -- Construisons un écouteur souris sur le visuel (v) --
// -- Nous pouvons positionner l'écouteur sur n'importe lequel des objets --
// -- Ici le choix porte sur 'conteneur1' --
// --
v.addEventListener (MouseEvent.CLICK, actionClick);
v.buttonMode = true;
// --
// -- Écrivons la fonction nommé : 'actionClick' --
// --
function actionClick (event:MouseEvent):void
{
   v.x = r3.x;
   v.y = r3.y;
   v.width = r3.width;
   v.height = r3.height;
   v.buttonMode = false;
   v.removeEventListener (MouseEvent.CLICK, actionClick);
   // --
   // -- Appelle de la fonction traceInfosGeneral() --
   // --
   traceInfosGlobal();
}

:: Mise en site le : 10 Mars 2008.
:: Dernière modification le : 10 mars 2008.



zardoz
Plug'zien Star'z
Plug'zien Star'z
 
Messages: 888
Inscription: 16 Fév 2008, 04:05
Points: 582


Retourner vers Flash

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités