Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1823 connectés 

  FORUM HardWare.fr
  Programmation
  Flash/ActionScript

  Problème de disparition programmée en AS3

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de disparition programmée en AS3

n°2166036
Pingoa
Posté le 29-11-2012 à 14:44:14  profilanswer
 

Bonjour à tous !
 
Je réalise un petit jeu en flash pour un projet de ma fac', j'm'en sors pas trop trop mal (tout en restant dans le très basique, on n'est pas dans une formation très technique) sauf pour un petit truc que je n'arrive pas à régler  :(  
 
Je vous explique, j'ai une cible qui bouge sur l'écran, et j'ai une ligne qui suit ce movie clip et qui trace donc le chemin qu'il a parcouru.
 
Le problème c'est que si on ne clique pas sur la cible pendant un moment (ce qui réinitialise le chemin) bah l'écran devient surchargé très rapidement et fait même lagger mon PC.
 
J'aimerais donc faire en sorte que la trajectoire suive bien mon movie clip mais qu'elle disparaisse progressivement 3 secondes après son apparition afin qu'il n'y ait jamais trop de bordel à l'écran.
 
J'ai réussi à faire disparaitre la trajectoire avec un timer, mais le problème c'est que ça fait disparaître TOUTE la trajectoire et pas juste ce qui est apparu 3 secondes avant :o
 
En gros il me faudrait un truc du genre addChildFor(ligne, 3 secondes) mais à la dernière nouvelle ça n'a pas l'air d'exister :D
 
Vous auriez une idée par hasard?
 
Merci d'avance !  :jap:


---------------
Fuerte : https://www.youtube.com/watch?v=_8e2reyfvuc
mood
Publicité
Posté le 29-11-2012 à 14:44:14  profilanswer
 

n°2166182
abais
Posté le 30-11-2012 à 16:16:13  profilanswer
 

Une methodologie simple :
 
A chaque frame, on enregistre les coordonnées du curseur.
On dessine un trait correspondant à la liaison des 50 dernières coordonnées enregistrées
 

Code :
  1. var listePoint:Array = new Array();
  2. var conteneurTrait:Shape = new Shape();
  3. var couleurTrait:uint = 0xFF0000;
  4. var nombreMaxPoints:int = 40;
  5.         
  6.  
  7. addChild(conteneurTrait);
  8. this.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
  9.  
  10. function enterFrameHandler(e:Event):void
  11. {
  12.     var pointSurvol:Point = new Point(conteneurTrait.mouseX, conteneurTrait.mouseY); // Coordonnée en cours de survol
  13.     listePoint.push(pointSurvol); // On l'ajoute en fin de notre tableau
  14.     
  15.     // On supprime les plus vieilles coordonnées :
  16.     while (listePoint.length > nombreMaxPoints)
  17.     {
  18.         listePoint.shift();
  19.     }
  20.     drawPath();
  21. }
  22.         
  23. function drawPath():void
  24. {
  25.     // On efface le trait actuel :
  26.     conteneurTrait.graphics.clear();
  27.             
  28.     conteneurTrait.graphics.lineStyle(3,couleurTrait); // On déclare le style du trait
  29.     conteneurTrait.graphics.moveTo(listePoint[0].x, listePoint[0].y); // On défini le point de départ (1er de la liste)
  30.             
  31.     // Pour chaque point (à partir du 2eme), on dessine le tronçon de trait
  32.     for (var i:int = 1; i < listePoint.length; i++)
  33.     {
  34.         conteneurTrait.graphics.lineTo(listePoint[i].x, listePoint[i].y);
  35.     }
  36.             
  37.     conteneurTrait.graphics.endFill();
  38. }


 
Ça marche assez bien si le taux de FPS est elevé.
Si il est faible et que tu ne peux pas l’élever, utilise un Timer plutôt qu'un Event.ENTER_FRAME !


Message édité par abais le 30-11-2012 à 16:40:23

---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
n°2166193
abais
Posté le 30-11-2012 à 16:40:12  profilanswer
 

Idem avec une atténuation du trait (pas de transparence, c'est un mélange avec du blanc, plus qu'à mettre ton layer en mode produit !)
Je me prend un peu la tête avec le R/V/B  :pt1cable: , pas le temps de faire plus simple  :o  

Code :
  1. var listePoint:Array = new Array();
  2. var conteneurTrait:Shape = new Shape();
  3.  
  4. var couleurTrait_R:uint = 0xFF;
  5. var couleurTrait_V:uint = 0x00;
  6. var couleurTrait_B:uint = 0x00;
  7.  
  8. var nombreMaxPoints:int = 40;
  9.         
  10.  
  11. addChild(conteneurTrait);
  12. this.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
  13.  
  14. function enterFrameHandler(e:Event):void
  15. {
  16.     var pointSurvol:Point = new Point(conteneurTrait.mouseX, conteneurTrait.mouseY); // Coordonnée en cours de survol
  17.     listePoint.push(pointSurvol); // On l'ajoute en fin de notre tableau
  18.     
  19.     // On supprime les plus vieilles coordonnées :
  20.     while (listePoint.length > nombreMaxPoints)
  21.     {
  22.         listePoint.shift();
  23.     }
  24.     drawPath();
  25. }
  26.         
  27. function drawPath():void
  28. {
  29.     // On efface le trait actuel :
  30.     conteneurTrait.graphics.clear();
  31.     
  32.     //conteneurTrait.graphics.lineStyle(3); // On déclare le style du trait
  33.     conteneurTrait.graphics.moveTo(listePoint[0].x, listePoint[0].y); // On défini le point de départ (1er de la liste)
  34.     
  35.     // Pour chaque point (à partir du 2eme), on dessine le tronçon de trait
  36.     for (var i:int = 1; i < listePoint.length; i++)
  37.     {
  38.         var parcour:Number = i / listePoint.length;
  39.         
  40.         var r:String = '00'+(0xFF - (0xFF - couleurTrait_R) * parcour).toString(16);
  41.         var v:String = '00'+(0xFF - (0xFF - couleurTrait_V) * parcour).toString(16);
  42.         var b:String = '00'+(0xFF - (0xFF - couleurTrait_B) * parcour).toString(16);
  43.         
  44.         var couleur:uint = uint("0x"+r.substr(-2)+v.substr(-2)+b.substr(-2));
  45.         conteneurTrait.graphics.lineStyle(3,couleur);
  46.         conteneurTrait.graphics.lineTo(listePoint[i].x, listePoint[i].y);
  47.     }
  48.     
  49.     conteneurTrait.graphics.endFill();
  50. }


Message édité par abais le 30-11-2012 à 16:43:13

---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Flash/ActionScript

  Problème de disparition programmée en AS3

 

Sujets relatifs
[Résolu] Problème de bordure rémanente intempestive après clic sur imgProblème d'affichage IE/Opera
Problème formule à plusieurs conditionsProbleme Warning: session_start() [function.session-start]
Problème de select qui sors en erreurResolu :Sql : probleme de requete (Subquery returns more than 1 row)
Probleme affichage entre IE et mozillaProblème installation cygwin
probléme JAVA: Interface Graphique , l’interaction des boutons[Shell] Problème script dans script
Plus de sujets relatifs à : Problème de disparition programmée en AS3


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR