IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flash Discussion :

Tracer un rectangle progressivement en AS


Sujet :

Flash

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 115
    Points : 120
    Points
    120
    Par défaut Tracer un rectangle progressivement en AS
    Bonjour

    Je cherche sous flash 8 à tracer un rectangle de facon progressive,

    c-a-d comme un tracé de crayon : une ligne qui grandit puis une autre perpendiculaire, ainsi de suite pour former un rectangle.
    Tout ca par l'actionscript afin que la taille soit facilement paramètrable

    J'ai pas mal fouillé sur le web mais sans succès...

    Alors je voudrais quelques conseils pour réaliser ceci !

    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 102
    Points : 97
    Points
    97
    Par défaut
    Salut,

    Voilà qui devrait faire l'affaire. Je ne l'ai pas inventé, c'est quelque chose qui était sur le CD avec mon bouquin ActionScript.

    1 - une classe LineDrawer (fichier .as)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    import mx.utils.Delegate;
    import mx.events.EventDispatcher;
    class LineDrawer extends MovieClipContainer {
      private var _x0:Number;
      private var _y0:Number;
      private var _x1:Number;
      private var _y1:Number;
      private var _framesTotal:Number;
      private var _frameCount:Number;
      public var addEventListener:Function;
      public var removeEventListener:Function;
      private var dispatchEvent:Function;
      public function LineDrawer(parent:MovieClip) {
        super(parent);
        EventDispatcher.initialize(this);
      }
      public function drawLine(thickness:Number, color:Number, x0:Number, y0:Number, x1:Number, y1:Number, frames:Number):Void {
        _target.lineStyle(thickness, color);
        _target.moveTo(x0, y0);
        _target.onEnterFrame = Delegate.create(this, draw);
        _x0 = x0;
        _y0 = y0;
        _x1 = x1;
        _y1 = y1;
        _frameCount = 0;
        _framesTotal = frames;
      }
      private function draw():Void {
        _frameCount++;
        var x:Number = _frameCount * (_x1 - _x0) / _framesTotal + _x0;
        var y:Number = _frameCount * (_y1 - _y0) / _framesTotal + _y0;
        _target.lineTo(x, y);
        if(_frameCount == _framesTotal) {
          delete _target.onEnterFrame;
          dispatchEvent({type: "complete", target: this});
        }
      }
    }
    2- dans ton .fla

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
    var lineDrawer:LineDrawer = new LineDrawer(this);
    var lineSegments:Array = [[100, 100], [200, 100], [200, 200], [100, 200], [100, 100]];
    var index:Number = 0;
    lineDrawer.addEventListener("complete", drawNext);
    drawNext();
    function drawNext():Void {
      if(lineSegments[index + 1] == undefined) {
        return;
      }
      var vertex0:Array = lineSegments[index];
      var vertex1:Array = lineSegments[index + 1];
      lineDrawer.drawLine(1, 0x000000, vertex0[0], vertex0[1], vertex1[0], vertex1[1], 10);
      index++;
    }
     
    C'est ce que tu voulais ? :D Il y a peut être mieux et plus simple, mais comme je ne sais pas faire et que ça fonctionne comme ça ......

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    Merci je vais essayer ca !!!

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    J'ai l'erreur suivante à la compilation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Ligne 3 : Impossible de charger la classe ou l'interface 'MovieClipContainer'.
         class LineDrawer extends MovieClipContainer {
     
    Total des erreurs ActionScript : 1 	 Erreurs signalées : 1

  5. #5
    Inactif Avatar de CR_Gio
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 195
    Points : 1 186
    Points
    1 186
    Par défaut
    Salut,

    Super mon truc va peut etre servire a quelqu'un

    Tu connais ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://devasco.perso.cegetel.net/appliTrace/appliTrace.html
    Dans cette page, clique sur "afficher l'aide" et suis le petit tutoriel qu'est fait.
    Voial! maintenat, tu sais comment générer les coordonnées de tes point

    Erff j'ais plus flash sous la main.... c'est pas grave : CR_Gio a plus d'un tour dans son sac ( Hé!! je suis en forme aujourd'hui moi lol )

    Je te propose d'essayer un de mes autre truc en version 0.0.0.0.0.0.0.0.1 vas sur cette page pour compliler ou essayer le script que je te propose. (J'ais mi un exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://devasco.perso.cegetel.net/flashOnLine/
    Pour compiler, click sur fichier>compiler dans la barre d'outil de l'interface.

    Une nouvelle s'affiche l'animation alors crée.

    Bon j'ai arreter ce truc car un browser c'est pas fait pour et ca peu freezer =/ ... J'ais tester ce truc sur IE6, FF1.5 et konqueror ( si ca passe sous konqueror, ca passe partout )

    PS: merci de pas faire de lien en dur sur mon site (sinon google me le black list d'office)

  6. #6
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    Merci c'est exactement ce que je voulais !

    mais au risque de paraitre lourd j'ai collé le code suivant dans une image de flash mais j'ai rien à la compilation (sur ton site ca marche nickel)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    var X:Array=new Array(10.9,12.3,109.45,159.4,177.8,194.95,203.95,204.4,203.6,202.5,201.8,201.05,201.05,200.4,200.4,199.75,199.75,198.4,177.15,155.9,117,72.5,17.1);
    var Y:Array=new Array(210.65,334.5,334.5,331.8,333.85,333.8,333.8,320.3,307.25,296.15,286.6,276.35,266.8,259.25,251.05,240.05,227.8,213.4,212.05,209.3,208.65,210,201.1);
     
    var i:Number=new Number(1);
    var ptLength:Number=new Number(X.length-1);
    var my_mc:MovieClip=mc_root.createEmptyMovieClip("carre",mc_root.getNextHighestDepth());
     
     
    my_mc.lineStyle(1, 0x000000, 100);
    my_mc.moveTo(X[0],Y[0]);
    my_mc.onEnterFrame=function(){
     
    if(i==ptLength) delete this.onEnterFrame;
     
    my_mc.lineTo(X[i],Y[i]);
    i++;
     
     
    }

  7. #7
    Inactif Avatar de CR_Gio
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 195
    Points : 1 186
    Points
    1 186
    Par défaut
    tu a une ligne a adapté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var my_mc:MovieClip=mc_root.createEmptyMovieClip("carre",mc_root.getNextHighestDepth());
    Si tu a mi le code dans un clip, alors remplace mc_root par this

    Ca devrai marché ....


    Au pire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    var X:Array=new Array(10.9,12.3,109.45,159.4,177.8,194.95,203.95,204.4,203.6,202.5,201.8,201.05,201.05,200.4,200.4,199.75,199.75,198.4,177.15,155.9,117,72.5,17.1);
    var Y:Array=new Array(210.65,334.5,334.5,331.8,333.85,333.8,333.8,320.3,307.25,296.15,286.6,276.35,266.8,259.25,251.05,240.05,227.8,213.4,212.05,209.3,208.65,210,201.1);
     
    var i:Number=new Number(1);
    var ptLength:Number=new Number(X.length-1);
     
     
    this.lineStyle(1, 0x000000, 100);
    this.moveTo(X[0],Y[0]);
    this.onEnterFrame=function(){
    if(i==ptLength) delete this.onEnterFrame;
    this.lineTo(X[i],Y[i]);
    i++;		
    }
    Salutation ....

  8. #8
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 115
    Points : 120
    Points
    120
    Par défaut


    Merci bcp ca marche !!!


  9. #9
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    Cerise sur la gateau :

    serait il possible d'avoir le même code mais indépendant de la vitesse de l'animation ?

    Merci encore !

  10. #10
    Membre émérite
    Avatar de jean philippe
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 062
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 062
    Points : 2 313
    Points
    2 313
    Par défaut
    utilise un setInterval()

  11. #11
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    Citation Envoyé par jean philippe
    utilise un setInterval()
    C'est ce que j'ai essayé mais je galere avec les onEnterFrame

  12. #12
    Membre émérite
    Avatar de jean philippe
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 062
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 062
    Points : 2 313
    Points
    2 313
    Par défaut
    soit tu utilises Onenterframe , soit SetInterval() MAIS pas les deux

  13. #13
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    Citation Envoyé par jean philippe
    soit tu utilises Onenterframe , soit SetInterval() MAIS pas les deux
    C'est bien pour ca que je galère

  14. #14
    Inactif Avatar de CR_Gio
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 195
    Points : 1 186
    Points
    1 186
    Par défaut
    bon ... on va pas se cassé la tete.
    Pour augmenté la vitess, tu diminue le nombre de point,
    pour diminuer la vitesse tu augmente le nombre de point

  15. #15
    Membre émérite
    Avatar de jean philippe
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 062
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 062
    Points : 2 313
    Points
    2 313
    Par défaut
    sinon avec setInterval() ça fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    var vitesse = 50;
    var X:Array = new Array(10.9, 12.3, 109.45, 159.4, 177.8, 194.95, 203.95, 204.4, 203.6, 202.5, 201.8, 201.05, 201.05, 200.4, 200.4, 199.75, 199.75, 198.4, 177.15, 155.9, 117, 72.5, 17.1);
    var Y:Array = new Array(210.65, 334.5, 334.5, 331.8, 333.85, 333.8, 333.8, 320.3, 307.25, 296.15, 286.6, 276.35, 266.8, 259.25, 251.05, 240.05, 227.8, 213.4, 212.05, 209.3, 208.65, 210, 201.1);
    var i:Number = new Number(1);
    var ptLength:Number = new Number(X.length-1);
    this.lineStyle(1, 0x000000, 100);
    this.moveTo(X[0], Y[0]);
    dessine = function () {
    	if (i == ptLength) {
    		clearInterval(intervalId);
    	}
    	this.lineTo(X[i], Y[i]);
    	i++;
    };
    intervalId = setInterval(this, "dessine", vitesse);

  16. #16
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    Merci tout fonctionne nickel !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/03/2011, 12h39
  2. Tracer un rectangle dans une console
    Par sheva007 dans le forum C
    Réponses: 6
    Dernier message: 28/04/2007, 10h24
  3. [FPDF] tracer un rectangle
    Par Kinobi dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 13/07/2006, 12h08
  4. Réponses: 2
    Dernier message: 15/10/2005, 22h55
  5. [VB.NET] Tracer un rectangle en pointillé
    Par Emcy dans le forum Windows Forms
    Réponses: 8
    Dernier message: 03/08/2004, 13h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo