AS3 - petit jeu Flash

AS3 - petit jeu Flash - Flash/ActionScript - Programmation

Marsh Posté le 15-08-2014 à 15:39:06    

Salut à tous,
 
J'essaye depuis peu de faire une petit jeu flash, et j'ai beau écumer internet à la recherche de tuto en tout genre, je me retrouve souvent en train de galérer pour les adapter à ce que je veux faire.
Là j'essaye mettre en  place une jauge de vie pour les monstres, qui diminue en fonction des coups qu'il reçoit.
Je me retrouve donc avec quelque chose comme ça :

Code :
  1. var currentLife : Number = 500
  2. var totalLife : Number = 500
  3. mc_attaque.addEventListener(MouseEvent.CLICK,sbaf);
  4. function sbaf(event:MouseEvent) {
  5. currentLife -= 20; //Décrémente la vie de 20 pts  
  6. trace (currentLife)
  7.     resizeBar(vie,currentLife,totalLife); //Actualise la barre de vie  
  8. }
  9. function resizeBar(bar:MovieClip, current:Number, total:Number){
  10. this.jauge.DisplayObject.scaleX = 100*current/total;
  11. }


(je compte ajouter de l'aléatoire ensuite, j'ai pris des valeurs simple pour commencer.)
currentLife étant la vie actuelle, et totalLife la vie total du monstre
"jauge" est le nom du MovieClip qui doit diminuer, et son occurrence à été nommée "vie".
 
La sortie me trace bien le currentLife, mais la barre ne dminu pas et je me retrouve avec :

Code :
  1. TypeError: Error #1010: Un terme n'est pas défini et n'a pas de propriété.
  2. at Sansnom_fla::barre_de_vie_1/resizeBar()
  3. at Sansnom_fla::barre_de_vie_1/sbaf()


 
es-ce que vous sauriez où est ce que sa cloche ?

Reply

Marsh Posté le 15-08-2014 à 15:39:06   

Reply

Marsh Posté le 17-08-2014 à 19:06:58    

ton nom n'est pas ok
"this.jauge.DisplayObject"  
ça dépend de la manière utiliser pour le créer. vérifier qui a bien était nommé dans les propriétés si tu l'as mis dans la bibliothèque. si il est contenu dans vie son chemin devrait être this.vie.jauge.scaleX
 
donc difficile de te répondre exactement sans un fla.
 
de plus scaleX  si      
                var currentLife : Number = 200;
                var totalLife : Number = 500  ;
                resizeBar(vie,200,500);
                this.jauge.scaleX = 100*(200/500); //ce qui donne resultat 40;
 scaleX ne marche qu' avec une valeur de 0 a1; si tu veux voir une diminution de ta barre scaleX de ta barre doit etre inférieur a 1 de moitié donne barre.scaleX = 0.5;

Reply

Marsh Posté le 22-08-2014 à 13:06:23    

Merci beaucoup pour ta réponse.
J'ai changé la formule de scaleX pour "scaleX = currentLife/totalLife;", là si j'ai 200/500, j'aurais scaleX = 0.4, ça devait mieux marcher.
 
En revanche je n'ai toujours pas compris d'où viens mon principal problème, avec le problème de nom. Tous mes movieclip possède un nom d’occurrence, et j'ai eu beau test les "this.vie.jauge..." "this.jauge.vie..." etc, ça ne fonctionnait pas.
 
J'ai mis mon fla ici si jamais tu veux y jeter un oeil : http://toutbox.fr/kerrad/barredevie,10119599.fla


Message édité par kerrad le 22-08-2014 à 13:07:50
Reply

Marsh Posté le 22-08-2014 à 23:57:45    

Tu confonds class et instance.
vie est une occurence (instance) de jauge (sa class).
 
C'est sur vie que tu dois agir, pas sur "jauge" qui est un type/class que tu peux instancier X fois (tu créer des occurrences)

Code :
  1. this.vie.scaleX = currentLife/totalLife;


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

Marsh Posté le 23-08-2014 à 20:15:04    

et oui
 

Code :
  1. var currentLife : Number = 500
  2. var totalLife : Number = 500
  3. mc_attaque.addEventListener(MouseEvent.CLICK,sbaf);
  4. function sbaf(event:MouseEvent) {
  5. currentLife -= 20; //Décrémente la vie de 20 pts  
  6. barre_pts.text = currentLife + "pts / " + totalLife + "pts";
  7.     resizeBar(vie,currentLife,totalLife); //Actualise la barre de vie
  8. }
  9. function resizeBar(bar:MovieClip, current:Number, total:Number){
  10. //this.jauge._xscale = current/total;
  11. vie.scaleX = currentLife/totalLife;
  12. }


tu as nommé ta barre vie dans l'onglet propriété
il faut donc la rapeller par se nom c'est a dire pour toi "vie".
@+ gustave02

Reply

Marsh Posté le 25-08-2014 à 17:47:40    

Merci tout les deux, ça marche de manière impeccable maintenant.
Il se peux que je rencontre d'autres problèmes du même genre en continuant le jeu donc je suis susceptible de le uper régulièrement :D  
 

Reply

Sujets relatifs:

Leave a Replay

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