AS3 : Animer un clip depuis une classe?

AS3 : Animer un clip depuis une classe? - Flash/ActionScript - Programmation

Marsh Posté le 13-03-2008 à 16:58:22    

Bonjour tout le monde,
 
Je commence l'AS3 et je galère un peu... J'ai certainement des problèmes de méthode et un manque de connaissance en POO.  
J'aimerai savoir s'il est possible de modifier un clip (ses dimensions, ses coordonnées, son opacité) depuis une classe importer dans un clip parent? C'est la librairie Tweener qui permet ce genre de chose?
 
Pour expliquer ce que j'ai fait jusque là, je charge dans mon FLA principal les différents clips utilisés pour mon site (dans mon exemple il n'y a que le SWF "BDZ_preloader.swf" ) :
 

Code :
  1. import ch.capi.net.*;
  2. import ch.capi.events.*;
  3. import flash.events.*;
  4. import caurina.transitions.*;
  5. import Preloader;
  6. var factory:LoadableFileFactory = new LoadableFileFactory();
  7. var loader:PriorityMassLoader = new PriorityMassLoader();
  8. //création des fichiers
  9. var bdz_preloader:ILoadableFile = factory.create("BDZ_preloader.swf" );
  10. //ajout des fichiers dans la liste de chargement
  11. loader.addPrioritizedFile(bdz_preloader, 10);
  12. var mc_bdz_preloader:Loader = bdz_preloader.loadManagerObject as Loader;
  13. addChild(mc_bdz_preloader);
  14. var preloader:Preloader = new Preloader();
  15. var accueil_progres:Function = function(evt:Event):void {
  16. var pourcent = preloader.setPourcent(evt.bytesLoaded,evt.bytesTotal);
  17. };
  18. loader.addEventListener(ProgressEvent.PROGRESS, accueil_progres);
  19. loader.start();


 
Ma classe Preloader :
 

Code :
  1. package {
  2. import ch.capi.net.*;
  3. import ch.capi.events.*;
  4. import flash.events.*;
  5. import caurina.transitions.*;
  6. public class Preloader {
  7.  public function setPourcent(loaded:Number,total:Number):int {
  8.   // Calcul du pourcentage chargé
  9.   var preloader_progres:int = Math.round((loaded/total)*100);
  10.   trace(preloader_progres);
  11.  }
  12.  public function affichePreloader(mc:Object) {
  13.   trace(mc);
  14.   //addChild(mc);
  15.  }
  16. }
  17. }


 
Pendant le chargement de mes swf un objet "Preloader" est créé. Il va me calculer le taux de chargement de mon animation totale avec la méthode setPourcent. Ce calcul va avoir des conséquences sur le clip "mc_bdz_preloader" chargé et affiché avec addChild sur la scène principale (progression de la barre de chargement etc.).  
Je sais pas si je peux agir sur le clip preloader depuis la classe. Peut être qu'il est préférable, si c'est possible, d'afficher ce clip dans la classe Preloader, c'est à dire que l'objet sera affiché (en utilisant une methode "affichePreloader" ) et modifié dans la classe.
 
Je suis perdu et j'ai un peu de mal à avancer... Si quelqu'un a le courage de me donner un coup de main, je suis intéressé  :hello: .

Reply

Marsh Posté le 13-03-2008 à 16:58:22   

Reply

Marsh Posté le 13-03-2008 à 19:59:16    

ta classe doit étendre flash.display.MovieClip et être liée au clip preloader_mc dans la bibliothèque (clic-droit sur le nom du clip). A partir de là , les éléments graphiques présents dans ce clip sont accessibles comme des propriétés publiques, appelées simplement en utilisant leur nom d'occurrence (que l'on attribue en cliquant l'élément sur la scène et en tapant dans la boite "propriétés" ).
 
dès lors une instanciation suivie d'un ajout à la liste d'affichage (addChild(new Preloader())) depuis ta classe racine de l'application va créer effectivement un preloader visible.
 
ta classe racine doit être dans un .as située dans le même dossier que le .fla, tu la lie à ton application via la barre de propriétés (clique sur du vide, hop, la case apparait en bas).

Reply

Marsh Posté le 13-03-2008 à 23:05:58    

antika a écrit :

ta classe doit étendre flash.display.MovieClip et être liée au clip preloader_mc dans la bibliothèque (clic-droit sur le nom du clip). A partir de là , les éléments graphiques présents dans ce clip sont accessibles comme des propriétés publiques, appelées simplement en utilisant leur nom d'occurrence (que l'on attribue en cliquant l'élément sur la scène et en tapant dans la boite "propriétés" ).
 
dès lors une instanciation suivie d'un ajout à la liste d'affichage (addChild(new Preloader())) depuis ta classe racine de l'application va créer effectivement un preloader visible.
 
ta classe racine doit être dans un .as située dans le même dossier que le .fla, tu la lie à ton application via la barre de propriétés (clique sur du vide, hop, la case apparait en bas).


 
Déjà, merci pour ton aide !
 
Je vois pas comment lier la classe au clip du Prelaoder par la bibliothèque parce que le clip en question n'est pas dans la bibliothèque. C'est un autre SWF chargé dans mon SWF principal...  
var bdz_preloader:ILoadableFile = factory.create("BDZ_preloader.swf" );
 Dans ce cas, comment faire?
 
L'affichage dois se lancer depuis la classe principale, c'est au autre classe que la classe Preloader? La classe principal va créer un nouvel objet de type Preloader? Pour l'instant la Classe Preloader est la seule que j'ai créé.
 
La classe racine doit être lié à mon clip principal? C'est à dire mon Main.swf qui appelle preloader.swf?
 
C'est pas encore très clair pour moi. Merci en tout cas pour ton aide !

Reply

Marsh Posté le 21-03-2008 à 15:59:40    

Je pense avoir un peu avancé. J'ai désormais une DocumentClass sur mon preloader.swf. Cette classe déclarer une variable qui sera affichée dans un TextField de mon preloader.
 
J'aimerai depuis mon main.swf lancer une fonction de la DocumentClass de mon preloader pour modifier la variable affichée dans mon prelaoder :
 
Main.swf  
 

Code :
  1. import ch.capi.net.*;
  2. import ch.capi.events.*;
  3. import flash.events.*;
  4. import flash.text.*;
  5. import caurina.transitions.*;
  6. import Preloader;
  7. var factory:LoadableFileFactory = new LoadableFileFactory();
  8. var loader:PriorityMassLoader = new PriorityMassLoader();
  9. //création des fichiers
  10. var bdz_preloader:ILoadableFile = factory.create("BDZ_preloader.swf" );
  11. //ajout des fichiers dans la liste de chargement
  12. loader.addPrioritizedFile(bdz_preloader, 10);
  13. var mc_bdz_preloader:Loader = bdz_preloader.loadManagerObject as Loader;
  14. addChild(mc_bdz_preloader);
  15. // Progression du chargement, lancement du Preloader
  16. var accueil_progres:Function = function(evt:Event):void {
  17. var tauxPreloader:int = Math.round((evt.bytesLoaded/evt.bytesTotal)*100);
  18. var pourcent = setPreloader(tauxPreloader as MovieClip);
  19. };
  20. loader.addEventListener(ProgressEvent.PROGRESS, accueil_progres);
  21. loader.start();


 
La DocumentClass, Preloader.as de mon preloader.swf :
 

Code :
  1. package
  2. {
  3. import flash.display.*;
  4. import flash.text.TextField;
  5. public class Preloader extends MovieClip
  6. {
  7.  private static var _preloader:Preloader = null;
  8.  private static var _pourcent:int;
  9.  public static var txt_pourcent:TextField;
  10.  public function Preloader():void
  11.  {
  12.   _preloader = this;
  13.  }
  14.  public static function setPourcent(pourcent)
  15.  {
  16.   _pourcent = pourcent;
  17.   return _pourcent;
  18.  }
  19. }
  20. }


 
La variable _pourcent qui est affichée dans mon preloader.swf, n'est pas modifiée, malgré que la fonction setPourcent soit lancée dans mon main.swf... Je vois pas comment faire... Une petite idée?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed