[résolu] Action script pour un graphique + class onEnterFrame

Action script pour un graphique + class onEnterFrame [résolu] - Flash/ActionScript - Programmation

Marsh Posté le 12-11-2007 à 10:53:41    

Bonjour je ne trouve pas ce que je cherche sur google.
C'est tres simple, j'ai une image, et j'en met une autre dessus (ou dedans selon le point de vue ), je voudrais que lorsque je clique sur cette derniere image, elle soit remplacé par une 3ieme.
Suis-je "obligé" de transformer ca en clip ou bouton? je voudrai juste faire un flash en AS pour que ca soit simple (je possede flash 8.0) (en gros un calque AS et un calque contenant une seule frame qui a toutes mes images ou clips. (les bouton me font planter comme quoi il y a des répétitions je n'arrive pas à les utiliser)
 
j'ai essayé ceci :

Code :
  1. var bouton = new b_demarrer_off();
  2. this.bouton.onRelease () {
  3.  this.bouton = new b_demarrer_on();
  4. }
  5. où b_demarrer_off est mon bouton relevé (enfin sa classe exporté pour AS2.0)
  6. et b_demarrer_on est mon bouton cliqué(idem)


C'est juste un test mais ca plante :

Code :
  1. **Erreur** Séquence = Séquence 1, calque = actions, image = 1 :Ligne 3 : Erreur de syntaxe.
  2.      this.bouton.onRelease () {
  3. **Erreur** Symbole = demarrer, calque = Layer 1, image = 1 :Ligne 1 : Impossible de charger la classe ou l'interface 'b_demarrer_off'.
  4. Total des erreurs ActionScript : 2   Erreurs signalées : 2


 
Dois-je definir des coordonnées? ou juste "glisser-deposer" mon image initiale (le bouton relevé que j'ai exporté pour AS2.0 sous le nom b_demarrer_off sur mon animation suffit?)
 
 
voila merci de vos reponses :)
Paul


Message édité par le_chanceux le 13-11-2007 à 15:16:50
Reply

Marsh Posté le 12-11-2007 à 10:53:41   

Reply

Marsh Posté le 12-11-2007 à 12:24:51    

Et ben heureusement que ton code est un peu plus clair que ton francais, sinon je pigeais pas UN mot de ce post ...
 
Donc erreur de syntaxe :
 this.bouton.onRelease () {
Il faut mettre  
this.bouton.onRelease = function(){
 
et pour ta classe, il faut l'importer parce que la, il ne la trouve pas.


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

Marsh Posté le 12-11-2007 à 12:30:41    

désolé j'ai du mal à m'exprimer sur le flash :S
comment importer une classe?
(j'ai tapé mon erreur dans google où j'y ai vu qu'il faut ajouter le chasspath dans les paramettres mais ca ne change rien à mon erreur :(
 
merci encore pour ta reponse!
Paul

Reply

Marsh Posté le 12-11-2007 à 13:23:10    

http://forum.hardware.fr/hfr/Progr [...] 9483_1.htm


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

Marsh Posté le 12-11-2007 à 15:52:38    

super tout marche bien merci, une derniere chose :
puis-je creer un element de type bouton ou clip, mais en tableau?
cad que je place mon "element" sur ma feuille de travail, dont tous les elements ont ._visible = false; et lorsque je veux, j'en rend visible chaqun parfois de temps en temps?
(ou je suis obligé de creer un clip avec des frame et faire des goToAndStop à chaque fois?)
 
merci

Reply

Marsh Posté le 12-11-2007 à 16:01:41    

Bah essaie, tu veras bien ....
Vu que j'ai pas trop compris la question :/


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

Marsh Posté le 12-11-2007 à 16:30:21    

erf c'est un peu galere le flash '-_- en plus les tuto ne font jamais ce que j'essaye de faire...
 
là j'en suis à un clip qui ne s'arrete jamais lorsque je fait un monclip.play() je ne peux pas determiner la fin bien que lorsque je le lance dans ma bibliotheque il s'arrete bien comme il faut... (meme avec un timer et un monclip.stop() ca ne s'arrete pas de tourner...)

Reply

Marsh Posté le 12-11-2007 à 22:52:35    

mmm, tu peux mettre un stop direct dans ton clip...
 
sinon, t'es pas obligé de faire un clip avec des frames et des goto !!
tu peux sans problèmes faire des _visible false et afficher les ellements que quand t'en a besoin...
 
voir ne pas les mettre sur le scène et aller les chercher dans la bibliotheque quand t'en a besoin avec attachMovie() (ou displayliste.addChild() en as3)

Reply

Marsh Posté le 13-11-2007 à 09:50:00    

oui effectivement le fait que le clip tournai en boucle etait du à un goToAndPlay que je n'avais pas placé moi meme (mais un pote graphiste qui l'a fait).
Pour l'instant j'ai fait un clip avec des frames. ca me fait une seule fonction à appeller et seulement 3occurence de mon clip (qui contient 12images/frames au choix) donc c'est plus simple de tout reunir ^^
 
Comment savoir lorsqu'on arrive sur la derniere image de notre occurence de clip?
car j'ai mis une variable lorsque je double clique sur mon clip, dans la derniere frame de mon clip, mais elle est "undefined" (je teste meme pas une fonction du coup)
Apres j'essaye dans l'occurence de mon clip mais je me retrouve avec "L’instruction doit apparaître dans le gestionnaire on/onClipEvent". On ne peut savoir lorsque le clip a fait un tour par exemple? (car j'ai fait du bidouillage là : j'ai créé une var que j'initialise à 0 à la fin de mon clip, pas de l'occurence, et avec une boucle je le recharge un certain nombre de fois, mais j'aurais voulu appeller une fonction apres, une fois que tout est chargé)
 
Cela dit je pense surement mal :S peut etre devrais je directement, en dur, definir le temps max du clip en rajoutant à la main des frames.
 
j'avais regardé attachMovie mais je vais essayer de revoir cette fonction, ca sera peut etre plus simple de tout definir dans le code plutot que de les créer et les placer sur mon appli à la volé.
merci encore :)

Message cité 1 fois
Message édité par le_chanceux le 13-11-2007 à 10:35:41
Reply

Marsh Posté le 13-11-2007 à 10:31:39    

le_chanceux a écrit :

oui effectivement le fait que le clip tournai en boucle etait du à un goToAndPlay que je n'avais pas placé moi meme (mais un pote graphiste qui l'a fait).
Pour l'instant j'ai fait un clip avec des frames. ca me fait une seule fonction à appeller et seulement 3occurence de mon clip (qui contient 12images/frames au choix) donc c'est plus simple de tout reunir ^^
 
j'avais regardé attachMovie mais je vais essayer de revoir cette fonction, ca sera peut etre plus simple de tout definir dans le code plutot que de les créer et les placer sur mon appli à la volé.
merci encore :)


 
ça dépend des cas en fait... si c'est des éléments ponctuels comme des popup ou des objets d'un jeu par exemple, tu peux faire du attachmovie depuis la bibliothèque sans problèmes
 
si c'est des éléments d'interface qui seront toujours la, pas besoin de les appeler dynamiquement, tu peux les poser sur la scène c'est pas un problème

Reply

Marsh Posté le 13-11-2007 à 10:31:39   

Reply

Marsh Posté le 13-11-2007 à 10:46:33    

ok, et pour connaitre la fin d'un clip? (j'ai edité mon message au dessus pendant que tu repondais :P

Reply

Marsh Posté le 13-11-2007 à 10:54:18    

pour la fin d'un clip t'as plein de solutions, les plus simples c'est :

 
  • A la dernière image de ton clip tu fais une fonction fin() qui va faire les actions pour passer a la suite (ton truc marche pas parce que t'as mis du code sur l'objet au lieu de le mettre sur la timeline !)


  • Ou tu fais une boucle qui regarde si t'as atteint la fin de ton clip

du genre :

 

monClip.onEnterFrame = function(){
 if(this._currentframe >= this._totalframes){
  delete this.onEnterFrame
  trace("on est a la fin" )
  }

 

}


Message édité par alpseb le 13-11-2007 à 10:54:41
Reply

Marsh Posté le 13-11-2007 à 11:09:54    

waaaaaaaaaaaaaaaa!!!
Tu as prononcé un new mot ^^ "timeline" je viens de chercher sur le net et sur l'aide flash et apparemment ca serait un objet.
 
sinon le "monClip.onEnterFrame me donne les frame de mon appli flash en general pas juste de mon occurence de clip si?
 
je regarde du coté du timeline là et j'ai du mal à saisir l'utilisation :S
il faudrait que je fasse un :
 
var curFrame = monClip.getDocumentDOM().getTimeline().currentFrame;
pour chaque frame de mon application (et non de mon clip) afin de voir où en est monClip? et pour avoir le nombremax de frame de monClip? je dois le rentrer en dur ou il y a une propriete?

Reply

Marsh Posté le 13-11-2007 à 11:27:40    

le_chanceux a écrit :

waaaaaaaaaaaaaaaa!!!
Tu as prononcé un new mot ^^ "timeline" je viens de chercher sur le net et sur l'aide flash et apparemment ca serait un objet.
 
En français c'est le scénario (la ou tu met tes frames et tes calques ;)... et le code ! )
 
 
sinon le "monClip.onEnterFrame me donne les frame de mon appli flash en general pas juste de mon occurence de clip si?
 
non, parcque tu fais [b]monClip.onEnterFrame ... ce qui fais qu'il va s'intéresser a monclip[/b]
 
je regarde du coté du timeline là et j'ai du mal à saisir l'utilisation :S
il faudrait que je fasse un :
 
var curFrame = monClip.getDocumentDOM().getTimeline().currentFrame;
pour chaque frame de mon application (et non de mon clip) afin de voir où en est monClip? et pour avoir le nombremax de frame de monClip? je dois le rentrer en dur ou il y a une propriete?
 
non, tout ça c'est du charabia qui était propriétaire a un projet ;)
tu peux pas mettre ton fihchier flash a dispo qu'on puisse jeter un oeuil et te montrer en pratique ?
 


Reply

Marsh Posté le 13-11-2007 à 11:31:47    

ok je fini de tout remettre au propre avec des classes et je t'envois ca :)
merci de m'aider ^^ ;)

Reply

Marsh Posté le 13-11-2007 à 12:06:11    

tu l'as recu? (je n'arrive pas à acceder à mon adresse free de là où je suis je t'ai envoyé ce que je pouvais par mp tu me diras)
 
thx ^^


Message édité par le_chanceux le 13-11-2007 à 12:07:00
Reply

Marsh Posté le 13-11-2007 à 15:09:09    

tres bien je fais un résumé pour que ca serve à d'autres :
j'ai tout transformé en class :
elle contient :
mon clip (declaration de type "Objet" dans le constructeur) auquel je veux que, lorsqu'il est fini, apparaisse mon second clip dont je ne veux qu'une image (lui aussi passé avec "Object" dans le constructeur et un 2ieme paramettre nous permettant de determiner quelle image nous donner de ce dernier clip)
 
j'y ai créé une fonction :

Code :
  1. private function lancerOEF (classe :Object/*on passe notre objet lors de l'appele à cette fonction où l'on souhaite qu'elle soit prise en compte*/) {
  2.  this.clip1.onEnterFrame = function(){ /*pour chaque frame*/
  3.  if(this._currentframe >= this._totalframes){ /*si on a fini de lire le clip*/
  4.   this.stop(); /*on l'arrete*/
  5.   this._visible = false; /*on le rend invisible*/
  6.   classe.clip2._visible = true; /*je fais apparaitre mon 2ieme clip*/
  7.   classe.clip2.gotoAndStop(troisieme_paramettre); /*on affiche l'image voulue*/
  8.   delete this.onEnterFrame; /*on supprime la fonction pour qu'elle ne soit pas inutilement appellée à chaqe frame*/
  9.   }
  10.  }
  11. }


 
et donc on l'appelle où on veut dans la classe (constructeur, autre fonction) par
 

Code :
  1. this.lancerOEF(this);


 
merci 1000fois à alpseb pour m'avoir aidé dans l'ecriture de ce code!
Et à zedlefou pour avoir tenté de m'aidé et m'avoir corrigé certaines erreurs!
n'hesitez pas à poster si votre probleme est similaire je tacherai d'eclairsir les points obscurs

Reply

Marsh Posté le 13-11-2007 à 17:36:48    

Heu, j'ai pas compris, elle est ou ta classe la dedans ?


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

Marsh Posté le 13-11-2007 à 17:53:30    

Code :
  1. class Roulette {
  2. private var clip_roulette :Object;
  3. public var clip_perso :Object;
  4. private var perso :String;
  5. //constructeur
  6. public function Roulette (clip_roulette_ : Object, clip_perso_ : Object, perso_ : String)
  7. {
  8.  this.clip_roulette = clip_roulette_;
  9.  this.clip_perso = clip_perso_;
  10.  this.perso = perso_;
  11.  this.clip_roulette.stop();
  12.  this.clip_perso.stop();
  13.  this.clip_perso._visible = false;
  14. }
  15. //fonction pour afficher le perso en fonction de la lettre du mec
  16. private function afficher_perso () {
  17.  switch (this.perso) {
  18.   case "Z":
  19.    this.clip_perso.gotoAndStop(1); break ;
  20.   case "T":
  21.    this.clip_perso.gotoAndStop(2); break;
  22.   case "H":
  23.    this.clip_perso.gotoAndStop(3); break;
  24.   case "K":
  25.    this.clip_perso.gotoAndStop(4); break;
  26.   case "A":
  27.    this.clip_perso.gotoAndStop(5); break;
  28.   case "M":
  29.    this.clip_perso.gotoAndStop(6); break;
  30.   default:
  31.    trace ("erreur " ); break; // a changer plus tard
  32.  }
  33. }
  34. private function lancerOEF (classe :Object) {
  35.  this.clip_roulette.onEnterFrame = function(){
  36.  if(this._currentframe >= this._totalframes){
  37.   this.stop();
  38.   this._visible = false;
  39.   classe.clip_perso._visible = true;
  40.   classe.afficher_perso();
  41.   delete this.onEnterFrame;
  42.   }
  43.  }
  44. }
  45. //fonction principale
  46. public function jouer ()
  47. {
  48.  this.clip_perso._visible = false;
  49.  this.clip_roulette._visible = true;
  50.  this.lancerOEF(this);
  51.  this.clip_roulette.play();
  52. }
  53. }


 
voila à quoi elle resemble si tu veux :)
lors d'une instanciation de cette classe je met les occurence de mes clips dans le constructeur :)


Message édité par le_chanceux le 13-11-2007 à 17:54:41
Reply

Sujets relatifs:

Leave a Replay

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