Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

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


Information sur la source

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é: 8 447 / 658

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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.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

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/creating_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/creating_as3_components.html
Il est aussi inclus une class de trace relativement basique

 

Fichier Zip

Pour les "Membres Club", vous pouvez 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

Commentaires et avis

signaler à un administrateur
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.

signaler à un administrateur
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 !!)

signaler à un administrateur
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à.

signaler à un administrateur
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 ;-)

signaler à un administrateur
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.

signaler à un administrateur
Commentaire de tomboul le 10/03/2008 12:46:24

Merci Pat RB

signaler à un administrateur
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 ...

signaler à un administrateur
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

signaler à un administrateur
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 !

signaler à un administrateur
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 ...

signaler à un administrateur
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 ...

signaler à un administrateur
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)

signaler à un administrateur
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

signaler à un administrateur
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....

signaler à un administrateur
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 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 chemin de classe depuis un dossier (AS3) [ par inaden ] Bonjour,voilà, c'est surement tout bête mais je n'arrive pas à liée une classe à un document qui se trouve dans un autre dossier.Pour être clair, je m AS3 Quel est l'evenement envoyé par un swf loadé à la fin de sa timeline ? [ par ourso ] Salut,Je taffe sur une anim d'intro, et j'ai besoin d'un évènement lorsque le film se finit... Or je n'ai pas accès au fla, mais je suis sur qu'il doi


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,983 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.