[FLASH7]Appel de fonctions de scripts externes

Appel de fonctions de scripts externes [FLASH7] - Flash/ActionScript - Programmation

Marsh Posté le 25-05-2008 à 16:56:47    

Bonjour,
 
Je suis entrain de faire mon premier code "élaboré" en AS que voici :

Code :
  1. var monClip:MovieClip = this.createEmptyMovieClip("conteneur", this.getNextHighestDepth()); //clip conteneur
  2. var monClip:MovieClip = this.createEmptyMovieClip("conteneur1", this.getNextHighestDepth());
  3. var mcl:MovieClipLoader = new MovieClipLoader(); //gestionnaire du chargement
  4. var mc2:MovieClipLoader = new MovieClipLoader();
  5. var ecouteurChargement:Object = new Object();
  6. ecouteurChargement.onLoadStart = function(target:MovieClip):Void { trace("start" ); };
  7. ecouteurChargement.onLoadProgress = function(target:MovieClip, loaded:Number, total:Number):Void { trace("progress" ); };
  8. ecouteurChargement.onLoadComplete = function(target:MovieClip):Void { trace("complete" ); };
  9. ecouteurChargement.onLoadInit = function(target:MovieClip):Void { trace("init" ); };
  10. ecouteurChargement.onLoadError = function(target:MovieClip, code:String):Void { trace("erreur" ); }
  11. mcl.addListener(ecouteurChargement);
  12. mc2.addListener(ecouteurChargement);
  13. mcl.loadClip("anim.swf", this["conteneur"]); //chargement de monswf.swf dans monClip
  14. this["conteneur"]._x=220;
  15. this["conteneur"]._y=200;
  16. mc2.loadClip("anim1.swf", this["conteneur1"]);
  17. this["conteneur1"]._x=80;
  18. this["conteneur1"]._y=160;


 
Ce code est dans un fichier nommé 'main.swf'
 
Deux questions :
 
1) Jsouhaiterais scinder l'appli sur plusieurs script flash, pour appeler les fonctions souhaitées (comme avec les 'include' en C++), mais je ne sais pas quel est la syntaxe.
Concrètement, j'ai du script dans un fichier 'Métiers.as'. Ce script contient une fonction 'maFonction()'
Comment faire appel à 'maFonction()' dans 'main.swf' ??
 
2) Le code ci-dessus charge deux swf externes.  
Quel est la syntaxe pour gérer les animations chargées depuis le fichier 'main.swf' ?
 
Ca serait tellement plus simple si jpouvais faire anim1.swf.gotoandplay(4)  :D  
 
Merci :)

Reply

Marsh Posté le 25-05-2008 à 16:56:47   

Reply

Marsh Posté le 27-05-2008 à 04:40:55    

1) Ton code tu le mets dans un fichier externe : main.as.
Ensuite dans ton Metier.as tu fais #include "main.as"
 
2) this.conteneur.gotoAndStop(4);


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 27-05-2008 à 17:00:02    

Zedlefou a écrit :

1) Ton code tu le mets dans un fichier externe : main.as.
Ensuite dans ton Metier.as tu fais #include "main.as"
 
2) this.conteneur.gotoAndStop(4);


 
- J'inclus 'main.as' dans 'metier.as' alors que je veux appeler des fonctions de 'metier.as' depuis 'main.as' ?
Je croyais que c'était l'inverse.
Et la syntaxe pour appeler une fonction d'un script externe en AS, c'est quoi ?
 
- Donc je dois mettre mon code dans fichier main.as et non main.swf ???
Dans ce cas, comment lancer le programme depuis le navigateur ?  J'ai l'habitude de lancer des swf depuis les navigateur, ais peut-on lancer directement un script AS ??
 
 

Reply

Marsh Posté le 28-05-2008 à 04:20:36    

Oui c'est l'inverse, j'avais mal lu.
 
Dans main.as tu mets #include "metiers.as"
 
Apres depuis main.as, tu n'as besoin de rien de plus pour appeler la fonction. Tu l'appels comme si tu l'avais déclaré dans ton fichier.
 
Pour tester, dans main.fla, tu mets #include "main.as" et tu exportes.


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 10-06-2008 à 14:24:08    

Voici la situation dans laquelle je me trouve :
J'ai un fichier mainBal.swf, dans lequel j'écris :

Code :
  1. #include "mainBal.as"


 
Dans mon fichier mainBal.as j'écris:

Code :
  1. #include "metier.as"
  2. import Player;
  3. this.createEmptyMovieClip("Joueur1", this.getNextHighestDepth()); //clip conteneur
  4. this.createEmptyMovieClip("Joueur2", this.getNextHighestDepth()); //clip conteneur
  5. var mcl:MovieClipLoader = new MovieClipLoader(); //gestionnaire du chargement
  6. var ecouteurChargement:Object = new Object();
  7. ecouteurChargement.onLoadStart = function(target:MovieClip):Void { trace("start" ); };
  8. ecouteurChargement.onLoadProgress = function(target:MovieClip, loaded:Number, total:Number):Void { trace("progress" ); };
  9. ecouteurChargement.onLoadComplete = function(target:MovieClip):Void { trace("complete" ); };
  10. ecouteurChargement.onLoadInit = function(target:MovieClip):Void { trace("init" ); };
  11. ecouteurChargement.onLoadError = function(target:MovieClip, code:String):Void { trace("erreur" ); }
  12. mcl.addListener(ecouteurChargement);
  13. Joueur1._x=0;
  14. Joueur1._y=0;
  15. Joueur2._x=400;
  16. Joueur2._y=0;
  17. var joueur1:Player=new Player();
  18. var nom:String=joueur1.NamePerso;
  19. mcl.loadClip(nom + ".swf", this.Joueur1);
  20. mcl.loadClip(nom + ".swf", this.Joueur2);
  21. for (var i:Number=0;i<10;i++){
  22. if (i%2 != 0){
  23.  this.Joueur1.gotoAndPlay(10);
  24.  trace ("impair" );
  25. }
  26. else{
  27.  this.Joueur2.gotoAndPlay(2);
  28.  trace ("pair" );
  29. }
  30. }


 
J'ai aussi un fichier Player.as où il y a :

Code :
  1. class Player
  2. {
  3. private var mouv:Number;
  4. private var namePerso:String;
  5.         public function Player(){
  6.  mouv=10;
  7.  namePerso="balle";
  8. }
  9. function get NamePerso():String {
  10.  return this.namePerso;
  11. }
  12. }


 
Enfin j'ai un fichier balle.swf
Sur la TimeLine, j'ai les informations suivantes :
image 1 => stop()
image 9 => gotoAndStop(2)
image 20 => gotoAndStop(10)
Entre 1 et 9, la balle effectue un mouvement verticale
Entre 10 et 20, un mouvement horizontale.
 
Dans la boucle For du fichier mainBal.as, je charge donc une balle dans deux conteneurs différents. Du coup, j'ai deux balles que je souhaite contrôler depuis mainBal.as.
Le problème est qu'après le chargement, aucune des 'balles' chargées ne bougent.
 
Quelqu'un saurait d'où vient le problème ?

Reply

Marsh Posté le 10-06-2008 à 15:55:20    

C'est bon, j'ai fini par trouvé.
Au cas où y en a qui tombe sur le même problème.
Fallait mettre tout le code dans le LoadInit et retirer le 'this'

Reply

Sujets relatifs:

Leave a Replay

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