begin process at 2010 03 20 22:39:17
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Composants Flash MX

 > DEFILEMEDIA : COMPOSANT AS3 DE GESTION DE GALERIE DE MEDIA + CLASS DEBUGTRACE DE DEBUGGING ÉVOLUÉ

DEFILEMEDIA : COMPOSANT AS3 DE GESTION DE GALERIE DE MEDIA + CLASS DEBUGTRACE DE DEBUGGING ÉVOLUÉ


 Information sur la source

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Composants Flash MX Classé sous :composant, galerie, bandeau, mouvement, AS3 Niveau :Initié Date de création :28/02/2008 Date de mise à jour :17/03/2008 03:48:05 Vu / téléchargé :9 284 / 727

Auteur : tomboul

Ecrire un message privé
Site perso
Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
la dernière version du composant est la
http://www.flashkod.com/codes/WHEELMEDIA_46082.as px
amélioration de la classe debugTrace
utilisation des classes de TOP30 wheel et side http://www.flashkod.com/codes/CLASS-WHEEL-SIDE_460 28.aspx

petit composant AS3 gérant une galerie de médias images et vidéos sur la base d'un fichier XML. Ce composant gère des évènements de chargement et d'un média sélectionné.
C'est en fait un bandeau de type TileList amélioré. les média défilent sur une roue, soit en fluide ou soit en pas à pas selon des paramètres du composant.
La structure du composant s'est inspiré du tutorial en anglais sur la création de composant en AS3 qu'on peut trouver à cette adresse :
http://www.adobe.com/devnet/flash/articles/creati ng_as3_components.html

demo du composant defileMedia ici :
http://yvars.lamarmite.fr/testClip.html

version complète du code la :
http://yvars.lamarmite.fr/defileMedia.zip

restriction de 1 mega pour le zip !!

Source

  • // je ne donnerais que les méthodes et propriété du composant,
  • // sachant que les sources sont disponibles dans les archives.
  • // ----------------------------------------------------
  • // - Tomboul (tomboul@lamarmite.fr) http://ww.lamarmite.fr
  • // - 02/2008
  • // - composant defileMedia
  • // ----------------------------------------------------
  • //
  • // visible : http://yvars.lamarmite.fr/testClip.html
  • //
  • // ----------------------------------------------------
  • //
  • // Package : marmite
  • // class : public class defileMedia
  • // Héritage defileMedia -> UIComponent -> Sprite -> DisplayObjectContainer -> InteractiveObject -> DisplayObject -> EventDispatcher -> Object
  • //
  • // Version du langage : ActionScript 3.0
  • // Version du lecteur : Flash Player 9.0.28.0
  • //
  • // Public Propriétés
  • // -----------------
  • // infos Média soit en texte ou dans un fichier XML (voir defileMedia.xml)
  • // >>> defileMediaXml:XML;
  • // >>> xmlFile:String;
  • //
  • // incrément de défilement
  • // cet incrément pourra être modifié pour
  • // régler la vitesse de défilement avec la souris
  • // si il est égal à 0, le mode de défilement se fait
  • // en pas à pas à chaque click de souris
  • // et lance un évènement à l'arrivée du média au centre
  • // >>> incr:Number=-1;
  • //
  • // coefficient de sensibilité pour maitriser la vitesse
  • // du défilement avec la souris
  • // >>> sensible:Number=16;
  • //
  • // défilement plat ou en demi cercle
  • // >>> defilementPlat:Boolean=false;
  • //
  • // sens défilement vertical ou horizontal
  • // >>> sensDefilement:String;
  • //
  • // cote max du média (horizontal ou vertical)
  • // >>> coteMax:Number;
  • //
  • // trace groupée pour class debugTrace via l'appli
  • // utilisant le composant
  • // >>> debug:Boolean
  • //
  • // chaine de mémorisation des traces (en lecture seulement)
  • // >>> debugStr:String
  • //
  • // Public Méthodes
  • // -----------------
  • //
  • // CONSTRUCTEUR DU COMPOSANT
  • // >>> defileMedia():void {
  • //
  • // avance sur un media numéroté
  • // >>> goToMedia(numMedia:uint=0) {
  • //
  • // avance sur le prochain
  • // >>> goToNextMedia() {
  • //
  • // avance sur le précédent
  • // >>> goToPrevMedia() {
  • //
  • // avance sur le dernier
  • // >>> goToLastMedia() {
  • //
  • // avance sur le premier
  • // >>> goToFirstMedia() {
  • //
  • // Evénements
  • // -----------------
  • //
  • // selection media
  • // >>> MEDIA_SELECTED:String = "mediaSelected";
  • // XML contenant les infos du media selectionné
  • // >>> mediaData:XML;
  • //
  • // chargement fichier XML media
  • // >>> MEDIA_LOADED:String = "mediaLoaded";
  • // object composé
  • // d'un boolean (result)
  • // d'un message string (error)
  • // >>> mediaOK:Object;
  • //
  • // --------------------------------------------------------------------------
// je ne donnerais que les méthodes et propriété du composant, 
// sachant que les sources sont disponibles dans les archives.

// ----------------------------------------------------
// - Tomboul (tomboul@lamarmite.fr) http://ww.lamarmite.fr
// - 02/2008
// - composant defileMedia
// ----------------------------------------------------
//
// visible : http://yvars.lamarmite.fr/testClip.html
//
// ----------------------------------------------------
//
// Package : marmite
// class : public class defileMedia
// Héritage defileMedia -> UIComponent -> Sprite -> DisplayObjectContainer -> InteractiveObject -> DisplayObject -> EventDispatcher -> Object 
//
// Version du langage :  ActionScript 3.0 
// Version du lecteur :  Flash Player 9.0.28.0 
//
// Public Propriétés
// -----------------
// 	infos Média soit en texte ou dans un fichier XML (voir defileMedia.xml)
//	>>> defileMediaXml:XML;
//	>>> xmlFile:String;
//
// 	incrément de défilement
// 	cet incrément pourra être modifié pour
// 	régler la vitesse de défilement avec la souris
// 	si il est égal à 0, le mode de défilement se fait 
// 	en pas à pas à chaque click de souris
// 	et lance un évènement à l'arrivée du média au centre
//	>>> incr:Number=-1;
//
// 	coefficient de sensibilité pour maitriser la vitesse
// 	du défilement avec la souris
//	>>> sensible:Number=16;
//
// 	défilement plat ou en demi cercle
//	>>> defilementPlat:Boolean=false;
//
// 	sens défilement vertical ou horizontal
//	>>> sensDefilement:String;
//		
// 	cote max du média (horizontal ou vertical)
//	>>> coteMax:Number;
//
// trace groupée pour class debugTrace via l'appli 
// utilisant le composant
//	>>> debug:Boolean
//
//	chaine de mémorisation des traces (en lecture seulement)
//	>>> debugStr:String
//
// Public Méthodes 
// -----------------
//
// 	CONSTRUCTEUR DU COMPOSANT
// 	>>> defileMedia():void {
//
// 	avance sur un media numéroté
// 	>>> goToMedia(numMedia:uint=0) {		
//
// 	avance sur le prochain
// 	>>> goToNextMedia() {
//
// 	avance sur le précédent
// 	>>> goToPrevMedia() {
//
// 	avance sur le dernier
// 	>>> goToLastMedia() {
//
// 	avance sur le premier
// 	>>> goToFirstMedia() {
//
// Evénements
// -----------------
//
// 	selection media
// 	>>> MEDIA_SELECTED:String = "mediaSelected";
// 		XML contenant les infos du media selectionné
//		>>>	mediaData:XML;
//
// 	chargement fichier XML media
// 	>>> MEDIA_LOADED:String = "mediaLoaded";
// 		object composé 
// 			d'un boolean (result)
// 			d'un message string (error)
//		>>> mediaOK:Object;
//
// --------------------------------------------------------------------------

 Conclusion

C'est ma première source en flash que je dépose.
Je suis auto-didacte en flash, j'ai été programmeur il y a une quinzaine d'année du temps du minitel, aujourd'hui je suis musicien et doit faire des sites pour me faire connaitre, d'ou ce come-back vers mon ancien gagne-pain.
Après avoir bien pompé ici et là, ce qui m'a permis de sérieusement progresser, je me suis senti redevable.
J'espère que ces sources pourront éclairer sur la création de composant en AS3. A ce jour (février 2008) il n'y a pas beaucoup de doc la dessus hormis ce tutorial très complet et très bien fait :
http://www.adobe.com/devnet/flash/articles/creat ing_as3_components.html
Il est aussi inclus une class de trace relativement basique

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

28 février 2008 05:02:08 :
AIE AIE !! ça commence bien !! on ne peut pas mettre un zip de plus de 1 mega !!! je pense que c'est trop peu ! en attendant de trouver une solution, on peut télécharger les sources ici http://yvars.lamarmite.fr/defileMedia.zip ça fait 2,5 mega, ce n'est pourtant pas énorme !!!
28 février 2008 05:05:28 :
tentative de mettre des liens dynamiques dans mes descriptions
28 février 2008 05:07:17 :
les liens dynamique avec les balises <a href= etc ... ne fonctionnent pas sur les textes de description. Bonne chance pour les copier coller !!!
28 février 2008 05:24:23 :
J'ai mis le code du composant sans le .fla qui permet de tester le composant. on peut télécharger la version complète la : http://yvars.lamarmite.fr/defileMedia.zip Pourtant, il n'y a aucune image, ni aucune vidéo, j'ai tenté le minimum. J'ai iben essayé d'enlever quelques fonds colorés par ci par la, mais ce n'est pas suffisant. Le tutorial d'adobe qui ne manipule que du texte est bien plus gourmand que le mien, qui pourtant manipule aussi des medias
28 février 2008 05:27:02 :
J'ai mis le code du composant sans le .fla qui permet de tester le composant. on peut télécharger la version complète la : http://yvars.lamarmite.fr/defileMedia.zip Pourtant, il n'y a aucune image, ni aucune vidéo, j'ai tenté le minimum. J'ai iben essayé d'enlever quelques fonds colorés par ci par la, mais ce n'est pas suffisant. Le tutorial d'adobe qui ne manipule que du texte est bien plus gourmand que le mien, qui pourtant manipule aussi des medias
28 février 2008 05:29:05 :
J'ai mis le code du composant sans le .fla qui permet de tester le composant. on peut télécharger la version complète la : http://yvars.lamarmite.fr/defileMedia.zip Pourtant, il n'y a aucune image, ni aucune vidéo, j'ai tenté le minimum. J'ai iben essayé d'enlever quelques fonds colorés par ci par la, mais ce n'est pas suffisant. Le tutorial d'adobe qui ne manipule que du texte est bien plus gourmand que le mien, qui pourtant manipule aussi des medias
28 février 2008 05:39:47 :
BUG du site flashkod : si on fait une prévisualisation, et qu'on retourne faire une retouche, il vous valide quand même "l'explication de la modification", d'ou la répétition de trois fois ma dernière modif ...
28 février 2008 05:43:05 :
correction d'une faute de copier-coller dans le code (commentaire)
17 mars 2008 03:48:06 :
la dernière version du composant est la http://www.flashkod.com/codes/WHEELMEDIA_46082.aspx amélioration de la classe debugTrace utilisation des classes de TOP30 wheel et side http://www.flashkod.com/codes/CLASS-WHEEL-SIDE_46028.aspx

 Sources du même auteur

Source avec Zip Source avec une capture WHEELMEDIA

 Sources de la même categorie

Source avec Zip CLIP BUTTON par mymy33
Source avec Zip Source avec une capture FORMULAIRE MAILEUR MULTIADRESSE -- FLASH=>PHP=>FLASH -- CONS... par tofstude2
Source avec Zip Source avec une capture LE FILEREFERENCELIST (OU COMMENT UPLOADER UN LOT D'IMAGE), C... par mankinder
Source avec Zip Source avec une capture TALKING WATCH par klamrani
Source avec Zip Source avec une capture COMPOSANT "PIE CHART" AS 1 par BananaTree

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture LANCER UNE GALERIE LIGHTBOX À PARTIR D'UN FLASH par beladom
Source avec Zip SUPER TWEEN PACKAGE par Acidchlorhydrik
Source avec Zip NAVIGATION DANS UN FICHIER XML par inaden
Source avec Zip DIAPORAMA AS3 par webcrea92
Source avec Zip Source avec une capture WHEELMEDIA par tomboul

Commentaires et avis

Commentaire de h1fra le 02/03/2008 22:14:03

Très bonne, source, je n epourrait pas en dire autant, c'ets vrai que l'interface est à revoir, l'époque du minitel et malheuresmeent révolu XDD, non je dec.
JE vais voir ce que je peut faire, juste après pour te montrer.

Commentaire de tomboul le 03/03/2008 10:28:43

L'époque du minitel est "heureusement" très révolu !!!
Mais pour l'époque c'était une petite révolution, j'avais alors travaillé (en 1985) dans la boite qui avait fait exploser les connexions (code funitel) grâce aux "chat", on programmait en assembleur IBM 8080, belle aventure !!
Aujourd'hui on est sur une autre planète !!!
Dans tous ces changement, ce que j'apprécie le plus c'est l'entre-aide énorme disponible sur le net ...

J'ai laissé des traces actives qui sont gourmandes dans le code, celles-ci se stockent en mémoire,
Pour y remédier, il faut modifier le source du calque action de TestClip,
la fonction : defileModified
supprimmer la ligne : defile.debug=true;

Après plusieurs changement (horizontal -> vertical -> horizontal ect ...) l'interface ralenti. Je n'ai pas trouvé la raison. J'ai vérifié grace à la fonction traceAllChild pour voir si j'avais bien fait le nettoyage (fin de la fonction handleMediaLoaded du calque action dans testClip), et j'ai bien toujours 18 enfants présents sur la scène ...

(bon j'arrête la, sinon je vais écrire un roman !!)

Commentaire de BananaTree le 03/03/2008 12:48:58

j'ai vagement survolé le fichier defileMedia.as (pas facile avec le moteur d'affichage de code source).
ton timer est mal conçu, le pb de "changement (horizontal -> vertical -> horizontal ect ...)" vient probablement en partie de là.

Commentaire de tomboul le 05/03/2008 09:23:42

Merci BananaTree pour ton commentaire ...
Effectivement, il y a quelque chose qui cloche la dedans, j'y retourne immédiatement ;-)

Commentaire de pat RB le 10/03/2008 10:51:05

Merci pour ca, en plus ca fait toujours plaisir de voir de joyeux troubadours. Je me suis bien éclaté à écouter les élucubrations d'antoine. Génial... Pour un auteur/compositeur comme moi, je trouve que la rue est toujours le meilleur endroit pour s'exprimer.

Commentaire de tomboul le 10/03/2008 12:46:24

Merci Pat RB

Commentaire de tomboul le 10/03/2008 13:01:23

BananaTree

J'ai bien regardé le code, et je ne comprends ce que veux tu dire par timer mal conçu ?

Mon timer est basé sur le principe de déplacer d'un pixel (paramètre incr) les conteneurs d'affichage des medias tout en réduisant leur taille aux extrémités pour donner l'impression du volume circulaire, et une fois la taille du média atteinte je fais tourner ma table des médias avec push(pop()) d'ou ce mouvement perpétuel des média.

A mon avis le problème est dans la gestion du changement des paramètres du composant.

Dans toutes mes traces j'ai ajouté un system.totalMemory (grace à ma classe debugTrace)
à la fin de la fonction draw, je prend au moins 8 méga à chaque fois ... donc au bout d'un moment c'est normal que ça ralentisse. J'ai aussi fait une fonction comptant tous les enfants présents sur la scène et ce nombre reste stable, donc mon nettoyage est opérant.

Tant qu'on ne change pas les paramètres de mon composant la quantité de mémoire occupée reste stable.

Je n'arrive pas à detecter d'ou vient cette occupation mémoire supplémentaire ...

Commentaire de dj_ouf le 12/03/2008 10:59:24

Hé ben franchement bon boulot!
Pour avoir repris la programmation récemment et pondre une application aussi fonctionnelle et dans un langage encore frais et pas très documenté, chapeau :p

Commentaire de top30 le 12/03/2008 13:15:24 7/10

http://www.flashkod.com/codes/CLASS-WHEEL-SIDE_46028.aspx
Spécialement concue pour essayer de t'aider.

Ton code me parait "lourd".. Trop lourd. C'est très difficile à lire et surtout à relire. T'imagines pas dans 6 mois qund ton niveau sera meilleur et que tu voudras améliorer ta source...
Les commentaires expliques ce que font les fonctions, mais à mon avis celles-ci devraient être scindée en fonction encore plus petites ou utiliser du code plus simple :


    Par exemple : tu devrais remplacer ------------------------------

        // placement du conteneur du sprite
        if (sensDefilement == "horizontal")
        {
            tabMedia [i].content.x = posAbs;
            tabMedia [i].content.width = coteVar;
        } else
        {
            tabMedia [i].content.y = posAbs;
            tabMedia [i].content.height = coteVar;
        }
        // si pas de hauteur => media non visible
        if (coteVar > 0)
        {
            tabMedia [i].content.visible = true;
        } else
        {
            tabMedia [i].content.visible = false;
        }

    Qui est tres lourd ! Par : --------------------------------------

        var media : *= tabMedia [i].content ;
        media.visible = false ;
        if ((coteVar > 0))
        {
            var hor : Boolean = (sensDefilement == "horizontal");
            var axe : String = (hor? 'x' : 'y');
            var size : String = (hor? 'width' : 'height');
            media [axe] = posAbs ;
            media [size] = coteVar ;
            media.visible = visibility ;
        }

    Qui me semble meilleur !



Niveau graphique : no coment !
J'ai mis que 7 car je trouve que cela manque de "..." quelquechose !

Commentaire de tomboul le 13/03/2008 10:16:43

Top30, tu ne fait que compressé l'écriture, mais ça ne change en rien la lourdeur au contraire, a y regarder de plus prés c'est ton code une fois compilé qui sera plus lourd.

Par rapport à mon code, tu utilises quatre variables supplémentaires (axe, size, hor et media) pour simplement compresser l'écriture.
Tu fais quatre tests alors que je n'en fait que deux.
Au final, le résultat compilé en assembleur sera plus lourd avec ton code, qu'avec le mien ...

J'ai travaillé dans plusieurs boites en tant que programmeur et l'écriture compressée telle que tu la préconises était déconseillée, mieux vaut un code "explicite" et plus long qu'un code court mais "tort-neurone" car souvent ça cache des lourdeurs d'exécution ...

Merci Top30 mais, ce genre de débat je connais depuis longtemps, et les arguments que je viens de te donner je les donnais déjà il y a une bonne quinzaine d'année ...

Commentaire de tomboul le 13/03/2008 10:36:49

Pour relativiser ma réponse précédente à Top30 ...
J'ai regardé ce que tu fais et toute ta participation impressionnante à ce site et je m'incline totalement. Je t'applaudis des deux mains et des deux pieds et je vais étudier ta classe whell de plus près.
Cependant méfie toi quand même de l'écriture hyper-compressé et réfléchis aux conséquences que cela peut avoir à la compilation

Petit conseil de vieux qui a travaillé en assembleur IBM 8080 pendant 6 ans et en assembleur 68000 pendant deux ans mais relativement novice pour les nouvelles technologies telle que le langage orienté objet et l'environnement multimédia, et peu compétent pour la géométrie et les maths ...

Commentaire de BananaTree le 13/03/2008 10:42:12

conceptuellement, les 2 codes ne sont pas optimums.
j'au toujours pas téléchargé le bidule, mais :

var hor : Boolean = (sensDefilement == "horizontal");
var axe : String = (hor? 'x' : 'y');
var size : String = (hor? 'width' : 'height');

normalement on devrait avoir :

private var _horizontal : Boolean;
private var _axe  : String ;
private var _size  : Number ;

ces valeurs devraient être mise à jour dans une action spécifique appellée par des mutateurs du type,
monBidule.horientation = monBidule.VERTICAL;

et logiquement par le constructeur pour l'initialisation des valeurs si pas déclarées par défaut...

là on est plus dans le byte code, on revient au bercail de la poo ;)
pour l'optimisation, cf. l'article de cédric tabin (perdu qq part sur la toile)

Commentaire de tomboul le 13/03/2008 12:13:15

Pour la poo, je m'incline et reste à l'affut de toutes infos pouvant améliorer mes compétences d'amateur !!!
pour Cédric Tabin que je me suis empressé d'aller voir c'est la :
http://www.mediabox.fr/b_MAX+:+Optimiser+son+code+AS3+avec+C%C3%A9dric+Tabin.html

Commentaire de top30 le 13/03/2008 12:16:53

package
{
     import flash.events.Event ;
     import flash.events.TimerEvent ;
     import flash.display.Sprite ;
     import flash.utils.Timer ;
     import flash.utils.getTimer ;
     //
     //
     public class SpeedTest
     extends Sprite
     {
          private var __mediaList : Array = [];
          private var __testsQty : uint = 500000 ;
          private var __startTime : uint = 0 ;
          private var __direction : String = '' ;
          private var __testName : String = '' ;
          //
          //
          public function SpeedTest () : void
          {
               __mediaList = [];
               while (__mediaList.length < 50 ) __mediaList.push (new Sprite ());
               //
               var timer : Timer = new Timer (1000, 3);
               timer.addEventListener ('timer', runTests );
               timer.start ();
          }
          //
          //
          public function runTests ($e : TimerEvent ) : *
          {
               var timer : Timer = Timer ($e.target);
               switch (timer.currentCount )
               {
                    case 1 : return __toujours2conditions ('TomBoul');
                    case 2 : return __1condition_puisSiTrue_3conditions ('Top30');
                    case 3 : return __1condition_puisSiTrue_1seuleAutreCondition ('Top30');
               }
               return null ;
          }
          //
          //
          public function __toujours2conditions ( $author:String ) : *
          {
               __testStart ($author);
               //
               var n : Number = - 1 ;
               while ( ++ n < __testsQty )
               {
                    var i : Number = Math.floor (Math.random () * __mediaList.length );
                    var length : Number = Math.round (Math.random ());
                    var direction : String = (Math.random () > 0.5? 'horizontal' : 'vertical' );
                    //
                    if (direction == "horizontal")
                    {
                         __mediaList [i].x = 10 ;
                         __mediaList [i].width = length;
                    } else
                    {
                         __mediaList [i].y = 10;
                         __mediaList [i].height = length;
                    }
                    //
                    if (length > 0)
                    {
                         __mediaList [i].visible = true;
                    } else
                    {
                         __mediaList [i].visible = false;
                    }
               }
               __testEnd ();
               return null ;
          }
          //
          //
          public function __1condition_puisSiTrue_3conditions ($author:String ) : *
          {
               __testStart ($author);
               //
               var n : Number = - 1 ;
               while ( ++ n < __testsQty )
               {
                    var i : Number = Math.floor (Math.random () * __mediaList.length );
                    var length : Number = Math.round (Math.random ());
                    var direction : String = (Math.random () > 0.5? 'horizontal' : 'vertical' );
                    //
                    var child : Sprite = __mediaList [i];
                    child.visible = false ;
                    //
                    if (length > 0)
                    {
                         var isH : Boolean = (direction == 'horizontal' );
                         var axe : String = (isH? 'x' : 'y' );
                         var siz : String = (isH? 'width' : 'height' );
                         //
                         child [axe] = 10 ;
                         child [siz] = length ;
                         child.visible = true ;
                    }
               }
               __testEnd ();
               return null ;
          }
          //
          //
          public function __1condition_puisSiTrue_1seuleAutreCondition ($author:String ) : *
          {
               __testStart ($author);
               //
               var n : Number = - 1 ;
               while ( ++ n < __testsQty )
               {
                    var i : Number = Math.floor (Math.random () * __mediaList.length );
                    var length : Number = Math.round (Math.random ());
                    var direction : String = (Math.random () > 0.5? 'horizontal' : 'vertical' );
                    //
                    var child : Sprite = __mediaList [i];
                    child.visible = false ;
                    //
                    if (length > 0)
                    {
                         if (direction == 'horizontal' ) __setMediaH (child, 10, length);
                         else __setMediaV (child, 10, length);
                    }
               }
               __testEnd ();
               return null ;
          }
          //
          //
          private function __setMediaH ($child : Sprite, $pos : Number, $size : Number ) : void
          {
               $child.x = $pos ;
               $child.height = $size ;
          }
          //
          //
          private function __setMediaV ($child : Sprite, $pos : Number, $size : Number ) : void
          {
               $child.y = $pos ;
               $child.width = $size ;
          }
          //
          //
          private function __testStart ($id : String ) : void
          {
               __testName = $id ;
               __startTime = getTimer ();
               //
               trace ('Test ' + $id + ' : START');
          }
          //
          //
          private function __testEnd () : void
          {
               var id : String = __testName ;
               var time : uint = getTimer () - __startTime ;
               //
               trace ('Test ' + id + ' : END');
               trace ('fonction exécutée ' + __testsQty + ' fois en ' + time + ' ms.' );
               trace ('' );
          }
     }
}


// Affiche :

Test TomBoul : START
Test TomBoul : END
fonction exécutée 500000 fois en 1968 ms.

Test Top30 : START
Test Top30 : END
fonction exécutée 500000 fois en 1197 ms.

Test Top30 : START
Test Top30 : END
fonction exécutée 500000 fois en 916 ms.

//
Sachant que moi dans mes classes, je pratiquais la version 2 !
Dorénavant je pratiquerais la version 3....

Commentaire de tomboul le 13/03/2008 13:48:18

Tiens marrant, mon temps d'exécution est à 1968 !! décidement ça me colle à la peau ;-)

Top30, je suis puper impressionné par ta rapidité à pisser du code !!!
Je m'incline,
OK j'ai fait une grosse erreur je devrais m'occuper de la position qu'après avoir tester la longueur et je devrais mettre un pointeur "child" sur __mediaList [i];

Mais je continue à tenir tête face aux puissant Top30 !!
Dans une de tes deux fonctions (__1condition_puisSiTrue_1seuleAutreCondition) pour rester rigoureux, si (length>0) il faut ajouter :
child.visible = true ;
Et pour être plus proche de mon composant il faut reduire l'alétoire de la longueur à 100
(longueur qui sera souvent utilisé pour un media reduit)

package
{
     import flash.events.Event ;
     import flash.events.TimerEvent ;
     import flash.display.Sprite ;
     import flash.utils.Timer ;
     import flash.utils.getTimer ;
     //
     //
     public class SpeedTest
     extends Sprite
     {
          private var __mediaList : Array = [];
          private var __testsQty : uint = 500000 ;
          private var __startTime : uint = 0 ;
          private var __direction : String = '' ;
          private var __testName : String = '' ;
          //
          //
          public function SpeedTest () : void
          {
               __mediaList = [];
               while (__mediaList.length < 50 ) __mediaList.push (new Sprite ());
               //
               var timer : Timer = new Timer (1000, 5);
               timer.addEventListener ('timer', runTests );
               timer.start ();
          }
          //
          //
          public function runTests ($e : TimerEvent ) : *
          {
               var timer : Timer = Timer ($e.target);
               switch (timer.currentCount )
               {
                    case 1 : return __toujours2conditions ('TomBoul');
                    case 2 : return __1condition_puisSiTrue_3conditions ('Top30');
                    case 3 : return __1condition_puisSiTrue_1seuleAutreCondition ('Top30');
                    case 4 : return __1conditionPuis2conditions ('TomBoul');
                    case 5 : return __1conditionPuis2conditionsAccesPointeur ('TomBoul');
               }
               return null ;
          }
          //
          //
          public function __toujours2conditions ( $author:String ) : *
          {
               __testStart ($author, "__toujours2conditions");
               //
               var n : Number = - 1 ;
               while ( ++ n < __testsQty )
               {
                    var i : Number = Math.floor (Math.random () * __mediaList.length );
                    var length : Number = Math.round (Math.random ()*100);
                    var direction : String = (Math.random () > 0.5? 'horizontal' : 'vertical' );
                    //
                    if (direction == "horizontal")
                    {
                         __mediaList [i].x = 10 ;
                         __mediaList [i].width = length;
                    } else
                    {
                         __mediaList [i].y = 10;
                         __mediaList [i].height = length;
                    }
                    //
if(length>0)
                    {
                         __mediaList [i].visible = true;
                    } else
                    {
                         __mediaList [i].visible = false;
                    }
               }
               __testEnd ();
               return null ;
          }
          //
          //
          public function __1conditionPuis2conditions ( $author:String ) : *
          {
               __testStart ($author, "__1conditionPuis2conditions");
               //
               var n : Number = - 1 ;
               while ( ++ n < __testsQty )
               {
                    var i : Number = Math.floor (Math.random () * __mediaList.length );
                    var length : Number = Math.round (Math.random ()*100);
                    var direction : String = (Math.random () > 0.5? 'horizontal' : 'vertical' );
                    //
                    __mediaList [i].visible = false;
if(length>0) {
                    if (direction == "horizontal")
                    {
                         __mediaList [i].x = 10 ;
                         __mediaList [i].width = length;
                    } else
                    {
                         __mediaList [i].y = 10;
                         __mediaList [i].height = length;
                    }
__mediaList [i].visible = true;
}
               }
               __testEnd ();
               return null ;
          }
          //
          //
          public function __1conditionPuis2conditionsAccesPointeur ( $author:String ) : *
          {
               __testStart ($author, "__1conditionPuis2conditionsAccesPointeur");
               //
               var n : Number = - 1 ;
               while ( ++ n < __testsQty )
               {
                    var i : Number = Math.floor (Math.random () * __mediaList.length );
                    var length : Number = Math.round (Math.random ()*100);
                    var direction : String = (Math.random () > 0.5? 'horizontal' : 'vertical' );
                    //
                    var child : Sprite = __mediaList [i];
                    child.visible = false ;
if(length>0) {
                    if (direction == "horizontal")
                    {
                         child.x = 10 ;
                         child.width = length;
                    } else
                    {
                         child.y = 10;
                         child.height = length;
                    }
child.visible = true;
}
               }
               __testEnd ();
               return null ;
          }
          //
          //
          public function __1condition_puisSiTrue_3conditions ($author:String ) : *
          {
               __testStart ($author , "__1condition_puisSiTrue_3conditions");
               //
               var n : Number = - 1 ;
               while ( ++ n < __testsQty )
               {
                    var i : Number = Math.floor (Math.random () * __mediaList.length );
                    var length : Number = Math.round (Math.random ()*100);
                    var direction : String = (Math.random () > 0.5? 'horizontal' : 'vertical' );
                    //
                    var child : Sprite = __mediaList [i];
                    child.visible = false ;
                    //
                    if (length > 0)
                    {
                         var isH : Boolean = (direction == 'horizontal' );
                         var axe : String = (isH? 'x' : 'y' );
                         var siz : String = (isH? 'width' : 'height' );
                         //
                         child [axe] = 10 ;
                         child [siz] = length ;
                         child.visible = true ;
                    }
               }
               __testEnd ();
               return null ;
          }
          //
          //
          public function __1condition_puisSiTrue_1seuleAutreCondition ($author:String ) : *
          {
               __testStart ($author, "__1condition_puisSiTrue_1seuleAutreCondition");
               //
               var n : Number = - 1 ;
               while ( ++ n < __testsQty )
               {
                    var i : Number = Math.floor (Math.random () * __mediaList.length );
                    var length : Number = Math.round (Math.random ()*100);
                    var direction : String = (Math.random () > 0.5? 'horizontal' : 'vertical' );
                    //
                    var child : Sprite = __mediaList [i];
                    child.visible = false ;
                    //
                    if (length > 0)
                    {
                         if (direction == 'horizontal' ) __setMediaH (child, 10, length);
                         else __setMediaV (child, 10, length);
                 child.visible = true ; // tomboul
                    }
               }
               __testEnd ();
               return null ;
          }
          //
          //
          private function __setMediaH ($child : Sprite, $pos : Number, $size : Number ) : void
          {
               $child.x = $pos ;
               $child.height = $size ;
          }
          //
          //
          private function __setMediaV ($child : Sprite, $pos : Number, $size : Number ) : void
          {
               $child.y = $pos ;
               $child.width = $size ;
          }
          //
          //
          private function __testStart ($id : String, $fonc : String ) : void
          {
               __testName = $id ;
               __startTime = getTimer ();
               //
               trace ('Test ' + $id + "(" + $fonc + ') : START');
          }
          //
          //
          private function __testEnd () : void
          {
               var id : String = __testName ;
               var time : uint = getTimer () - __startTime ;
               //
               trace ('Test ' + id + ' : END');
               trace ('fonction exécutée ' + __testsQty + ' fois en ' + time + ' ms.' );
               trace ('' );
          }
     }
}

affiche :

Test TomBoul(__toujours2conditions) : START
Test TomBoul : END
fonction exécutée 500000 fois en 1781 ms.

Test Top30(__1condition_puisSiTrue_3conditions) : START
Test Top30 : END
fonction exécutée 500000 fois en 2076 ms.

Test Top30(__1condition_puisSiTrue_1seuleAutreCondition) : START
Test Top30 : END
fonction exécutée 500000 fois en 1500 ms.

Test TomBoul(__1conditionPuis2conditions) : START
Test TomBoul : END
fonction exécutée 500000 fois en 2081 ms.

Test TomBoul(__1conditionPuis2conditionsAccesPointeur) : START
Test TomBoul : END
fonction exécutée 500000 fois en 1484 ms.


En les cas tout merci à toi et BananaTree, j'apprends beaucoup avec vous ...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

galerie photo avec image survolée [ par pyxmalion ] Je débute en action script et suis pas mal largué ! Je voudrais créer un galerie photo avec un petit bandeau de vignettes en bas dont l'image survolé Changer la police d'un composant TextArea ( AS3 ) [ par sep2vigne ] Bonjour,Je souhaite modifier la mise en forme du texte dans un composant TextArea.Je code en AS3.Le code suivant :   var format:TextFo [AS3] Effet de perspective au mouvement de la souris [ par mchicault ] Bonsoir ! Voilà j'ai vu un site aujourd'hui qui m'a grandement intrigué !! Je me demande comment les créateurs on fait pour créer cet effet de persp Recherche composant AS3 - playlist [ par fxlamare ] Bonsoir,   Je recherche un composant AS3 (ou des idées) capable de répondre en partie à ma problématique (voire même entièrement soyons fou, je suis élimination d'un "TextField" en as3 [ par inaden ] Bonjour,je n'arrive pas à trouver s'il existe une fonction permettant de supprimer un champ texte crée comme cela : var monTexte:TextField = new TextF detecter le fait de pas bouger la souris AS3 [ par dipin ] bien le bonjour.question pour AS3J'ai cherché un événement pour pouvoir détecter le fait que l'utilisateur ne bouge pas la souris pendant un temps X m les fonctions dans as3 [ par zorba07 ] Bonjour,Je voudrais savoir si je peux pour un même évènement de souris déclencher 2 ou plus fonctions créées:function afficher1(evt:MouseEvent){gotoAn AS3 : Lancer un swf à l'aide d'un bouton [ par meimouna ] J'ai fait une animation swf et je veux l'intégrer dans un fla.J'explique un peu le projet pour mieux se mettre en situation :le fla est un menu (as3) AS2 et AS3 : compléments [ par Limack ] Salut! Quelles sont les améliorations faites au niveau de AS2 pour donner le AS3, autrement dit quels sont les éléments qui complètent le AS2 par rap [AS3] Acces à la liste des objets depuis une classe [ par mchicault ] Bonsoir !! Je suis débutant en AS3 et je tente de respecter les principes de la programmation POO. J'arrive à trouver la plupart des solutions aux em


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,045 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales