Forums Développement Multimédia

Aller au contenu

Jauge de vie

PAO Flash

29 réponses à ce sujet

#1 jonathan.vasseur60

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 140 messages

Posté 22 May 2008 - 13:02 PM

Salut !

Ca fait un petit moment que je ne suis pas passé dans le coin. Mais mon jeu en flash progresse peu à peu ! Enfin.... Là, je suis en train de réaliser des fichier de test afin d'approfondir mes connaissances ! Et là, j'ai besoin d'aide.

Voici mon problème.

Sur mon fichier de test, j'ai placé deux rectangles qui vont servir à simuler une jauge de vie pour mon jeu... Il sont en place et un bouton va servir à simuler une attaque infligeant des points de dégâts ! Ma jauge de vie a pour nom d'occurence "mc_barre" et mon bouton a pour nom d'occurence "mc_attaque".

Question N°1 :
- Comment assigner à ma jauge de vie un nombre de points... exemple : 350 pts...

Et j'ai pas mal de questions derrière celle-là... Mais je vais les poser progressivement, pour éviter de mêler les pinceaux... Allez, à bientôt !

#2 antinua

  • Members
  • PipPipPipPipPipPipPipPip
  • 1067 messages

Posté 22 May 2008 - 13:21 PM

Bonjour.

Selon les effets que l'on veut donner a la barre, on utilise en général des méthodes légèrement différentes. Voici un exemple de code permettant de definir la taille de la barre en fonction de nombre de points de vie courant (currentLife) et total (totalLife):

Action Script

function resizeBar(bar:MovieClip, current:Number, total:Number){
bar._xscale = 100*current/total;
}

//USAGE
resizeBar(mc_barre, currentLife, totalLife)

De la il suffit de soustraire une valeur a currentLife a chaque appuis sur le bouton, et d'appeller resizeBar.

Bonne journée.

#3 jonathan.vasseur60

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 140 messages

Posté 22 May 2008 - 13:41 PM

Ok... Premier point... mais où doit-on mentionner le nom d'occurence "mc_barre" là-dessus ? là où tu as écrit "bar", c'est çà ?
Et il faut ensuite que je dise quel est le nombre de point maximum, voire le nombre de points actuel si besoin, en actionscript ? Où puis-je indiquer çà ?

Modifié par Jonathan Vass, 22 May 2008 - 13:46 PM.


#4 jonathan.vasseur60

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 140 messages

Posté 22 May 2008 - 14:05 PM

Pardon, j'ai commis une erreur sur mon dernier message...
Je vais restifier ma question... Donc... j'ai copié-collé le code dans ma palette d'actions Mais je ne sais pas comment y insérer mes nombres de points total et courant ! Voilà !

A plus tard !


#5 Tekkila

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 7355 messages

Posté 22 May 2008 - 14:17 PM

Bonjour,

Citation ("Aralicia")
resizeBar(mc_barre, currentLife, totalLife)


Quand tu veux faire un changement de la valeur de la vie, tu appelle cette fonction.
mc_barre : nom de ton Clip qui represente ta barre
currentLife : valeur de la vie actuelle
totalLife : valeur totale de la vie au départ

En gros si tu veux retirer 20 points de vie, tu décrémente uniquement currentLife.

A+

Joni

#6 jonathan.vasseur60

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 140 messages

Posté 22 May 2008 - 14:43 PM

OK... Bon, je suis pas sûr d'avoir bien tout suivi... icon_question.gif
Bon, la signification de currentLife et de totalLife, je l'ai compris... Là dessus pas de problèmes !
Moi, il me faut la barre pleine au début de l'anim... C'est tout... Pour le moment, je ne cherche pas à enlever des points... Cà, c'est pas pour tout de suite !
Tout ce que je cherche à faire, c'est définir les valeurs de départ : 350 pts total ET courant...

Reprenons donc... J'ai çà sur la palette d'action, pour commencer, vu que j'ai copié ce que m'a envoyé Aralicia :

Action Script


function resizeBar(bar:MovieClip, current:Number, total:Number){
bar._xscale = 100*current/total;
}

//USAGE
resizeBar(mc_barre, currentLife, totalLife)

Il est clair qu'avec çà, rien ne fonctionnera... Que dois-je modifier ou ajouter ?
Désolé si je ne comprends pas bien le truc ! icon_cry.gif

A plus !

#7 Tekkila

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 7355 messages

Posté 22 May 2008 - 15:32 PM

Essaie ca (en admettant que ton Clip qui contient la barre s'appelle mc_barre):

Action Script


var currentLife:Number = 350;
var totalLife:Number = 350;

function resizeBar(bar:MovieClip, current:Number, total:Number){
bar._xscale = 100*current/total;
}
resizeBar(mc_barre, currentLife, totalLife)

Tu auras ta barre de vie pleine à 350 pts.

Et pour la suite, si tu veux tester un dommage sur un bouton que tu appelles par exemple mc_dommage et tu mets le code suivant sur la timeline principale:

Action Script


mc_dommage.onPress = function(){
currentLife -= 20; //Décrémente la vie de 20 pts
resizeBar(mc_barre,currentLife,totalLife); //Actualise la barre de vie
}

A+

Joni

#8 jonathan.vasseur60

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 140 messages

Posté 22 May 2008 - 18:25 PM

J'ai essayé le code pour la situation initiale et tout marche...
Par contre, la simulation d'attaque ne veut absolument rien savoir. Je clique sur le bouton et rien ne se passe ! Bizarre...
Et le logiciel ne repère aucune erreur, pourtant...

Tu as une idée là-dessus ?

Je vais voir s'il n'y a pas une erreur quelque part, en attendant une réponse...


#9 jonathan.vasseur60

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 140 messages

Posté 22 May 2008 - 18:34 PM

C'est bon, fausse alerte !
Super, çà marche...

Ok....

Je vais essayer de fignoler un peu ( par exemple pour éviter que la barre se rétracte dans l'autre sens. En gros pour que ça n'aille jamais en dessous de zéro...

Je vais ensuite faire en sorte que le nombre de points s'affiche sous la barre de vie ! Et on pourra dire que c'est un début et faire apparaître un message quans la jauge aura atteint zéro... Restez dans le coin, je vous préviens si j'ai un problème...

Au fait une question... On peut mélanger l'actionscript 1 et 2 dans un fichier flash actionscipt 2.0... Mais sur un fichier actionscipt 3.0, il n'est pas possible de mélanger les 3 langages... C'est normal ? Parce que j'ai Flash CS3 depuis peu et j'ai constaté ça depuis quelques heures !

A plus !

#10 antinua

  • Members
  • PipPipPipPipPipPipPipPip
  • 1067 messages

Posté 22 May 2008 - 18:48 PM

Bonjour.

En fait, l'AS2 n'est qu'une version supérieure de l'AS1, tandis que l'AS3 est un autre langage.
En clair, l'AS2 contient toutes les fonctionnalités de l'AS1 et en rajoute.
L'AS3, lui, est beaucoup trop éloigné de l'AS1 pour que ces derniers fonctionnent ensemble.

Cela peut même se vérifier par le fait que l'AS1&2 tourne avec l'AVM1, tandis que l'AS3 tourne sur l'AVM2. En clair, si tout script AS1 fonctionne en AS2, il est loin d'être aussi sur qu'il soit compatible AS3.

Donc,je dirais que c'est normal.

Bonne journée.

#11 paodao

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 7081 messages

Posté 22 May 2008 - 18:54 PM

salut
je rajoute juste un truc ou deux
il bon de savoir que l'AS2 est compiler en AS1

il est possible de faire communiquer AS2 et AS3 via les local connection

il est aussi possible de charger des swf AS2 dans des swf AS3
a+

#12 jonathan.vasseur60

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 140 messages

Posté 22 May 2008 - 20:35 PM

Merci pour l'info...
Bah... J'ai encore une question... eh eh...

Maintenant, je cherche à empêcher que la jauge passe en dessous de zéro...

Il doit y avoir une manip simple pour çà ? Laquelle ?

#13 antinua

  • Members
  • PipPipPipPipPipPipPipPip
  • 1067 messages

Posté 22 May 2008 - 21:35 PM

Bonjour.

...

Action Script

mc_dommage.onPress = function(){
currentLife -= (currentLife => 20 ? 20 : currentLife); //Décrémente la vie de 20 pts
resizeBar(mc_barre,currentLife,totalLife); //Actualise la barre de vie
}

Bonne journée.

#14 jonathan.vasseur60

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 140 messages

Posté 23 May 2008 - 08:07 AM

Salut !

Aralicia, j'ai un problème avec le bout de code que tu viens de me donner. Le logiciel repère l'érreur suivante sur la ligne 2 de ton code :

"L'opérateur "=" doit être suivi d'une opérande."

!! C'est quoi ce shmilblick ? Le logiciel fait un caprice... Je vais voir si je peux repérer l'erreur, mais je ne crois pas...

A plus !

#15 paodao

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 7081 messages

Posté 23 May 2008 - 08:35 AM

salut

une petite erreur c'est glisser
remplace => par >=

a+

#16 Tekkila

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 7355 messages

Posté 23 May 2008 - 08:37 AM

Bonjour,

Personnellement, je ferais comme cela (c'est pas ce qu'il y a de plus optimisé mais c'est plus simple à comprendre):

Action Script



mc_dommage.onPress = function(){
currentLife -= 20; //Décrémente la vie de 20 pts
if (currentLife < 0){ //Si la vie est inférieure à 0, on la remet à 0 afin de ne jamais passer la barre à l'envers
currentLife = 0;
}
resizeBar(mc_barre,currentLife,totalLife); //Actualise la barre de vie
}

A+

Joni

#17 jonathan.vasseur60

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 140 messages

Posté 23 May 2008 - 11:46 AM

Ok.. J'ai pris note des deux solutions proposés, donc tout va bien...
Bon... à présent, je vais pouvoir appliquer çà sur plusieurs barres de vie assigné au même personnage avant de passer à une étape un peu plus étoffé.

Ah, non... pas encore... J'ai juste un petit détail à régler avant...
J'aimerais pourvoir faire en sorte que le nombre de points de vie restantes soit constament affiché !

J'ai placé une fenêtre de texte dynamique près de ma jauge de vie et je lui ai donné le nom d'occurence "mc_pts"...
Mais comment afficher le résultat de currentLife ?

A plus !

#18 Tekkila

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 7355 messages

Posté 23 May 2008 - 13:09 PM

en faisant comme cela.

Dans ta fonction resizebar tu mets:

Action Script

mc_pts.text = current

A+

Joni

#19 jonathan.vasseur60

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 140 messages

Posté 23 May 2008 - 17:26 PM

Répète, Joni...

Je ne vois rien sur ton échantillon actionscript ? Peux-tu le réecrire ?

Merci !

#20 Tekkila

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 7355 messages

Posté 23 May 2008 - 18:07 PM

en faisant comme cela.

Dans ta fonction resizebar tu mets:

mc_pts.text = current

A+

Joni

#21 jonathan.vasseur60

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 140 messages

Posté 23 May 2008 - 21:55 PM

Merci Joni...

Et pour afficher les dégâts infligés sur l'écran...
Ce serait cool si, quand je clique sur le bouton, un nombre indiquant les points de dégâts apparaît pour deux ou trois secondes !

Sais-tu comment procéder ?

#22 jonathan.vasseur60

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 140 messages

Posté 26 May 2008 - 07:34 AM

Bon, bah, en ce moment, je suis en train de préparer un fichier définitif pour le jeu que je suis en train de réaliser. Mais j'ai une autre question, au cas où...

là, j'enlève 20 pts à chaque coup.
Seulement, je voudrais pimenter un peu le jeu. Bien sûr, la puissance de base de mon arme est définie à l'avance pour mon jeu, mais j'ai aussi établi une grille de résulats proposant des dégâts aléatoires...
Ca repose sur deux facteurs :
1 : les dégats encaissés : (par exemple un coup c'est 18, un autre coup, c'est 22, et le prochain enlèvera 19... C'est tout bonnement aléatoire...
2 : Il y a aussi des chances pour que le coup soit loupé ! En gros, il peut arriver que le coup foire !

Commençons par le début... Est-ce que quelqu'un sait comment permettre plusieurs résultats de manière aléatoire (par exemple, au lieu de 20, 20, 20, 20, 20, on obtient plutôt 18, 22, 17, 19, 20... ) ?

#23 Tekkila

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 7355 messages

Posté 26 May 2008 - 09:04 AM

Bonjour,

Citation
1 : les dégats encaissés : (par exemple un coup c'est 18, un autre coup, c'est 22, et le prochain enlèvera 19... C'est tout bonnement aléatoire...


Pour cela, le plus pratique serait de rentrer les valeurs que peuvent prendre tes dégats dans un tableau et tirer un nombre aléatoirement dans ce tableau lorsque tu veux infliger un dégat.

Citation
2 : Il y a aussi des chances pour que le coup soit loupé ! En gros, il peut arriver que le coup foire !


Admettons que le coup a 2 chances sur 10 de rater.

Là, tu génère un nombre aléatoire entre 1 et 10 et si ce nombre est >=9, pas de dégats, sinon, tu t'en prends plein la tronche. icon_biggrin.gif

A+

Joni

#24 jonathan.vasseur60

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 140 messages

Posté 26 May 2008 - 09:49 AM

okay...

Donc, tu dis "rentrer les valeurs que prennent les dégâts" dans un tableau"...
Que voulais-tu dire par là, Joni ? J'ai pas tout saisi ?

#25 Tekkila

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 7355 messages

Posté 26 May 2008 - 10:05 AM

Comme ceci:

Action Script

var degatsArr:Array = new Array(18,19,20,21,22);

Ainsi, tu obtiens un tableau avec les valeurs que peuvent prendre les dégats.

Ensuite pour tirer aléatoirement dans ce tableau:

Action Script

degatArr[Math.round(Math.random()*degatArr.length+1)]

A+

Joni

#26 jonathan.vasseur60

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 140 messages

Posté 26 May 2008 - 10:29 AM

OK...

Voici ma page de code :

Action Script


var currentCorps:Number = 350;
var totalCorps:Number = 350;

function resizeCorps(bar:MovieClip, current:Number, total:Number){
bar._xscale = 100*current/total;
mc_pts.text = current;
}
resizeCorps(mc_corps, currentCorps, totalCorps)

mc_attaque.onPress = function(){
currentCorps -= (currentCorps >= 20 ? 20 : currentCorps); //Décrémente la vie de 20 pts
resizeCorps(mc_corps,currentCorps,totalCorps); //Actualise la barre de vie
}

Ton premier echantillon de code, je le mets avec les autres variables, et la deuxième, je la mets où ?

#27 Tekkila

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 7355 messages

Posté 26 May 2008 - 11:09 AM

Action Script


var degatsArr:Array = new Array(18,19,20,21,22); //tableau des dégats possibles
var degat:Number; //variable des dégats
var touche:Number; //variable pour savoir si le coup est manqué ou non
var currentCorps:Number = 350;
var totalCorps:Number = 350;

function resizeCorps(bar:MovieClip, current:Number, total:Number){
bar._xscale = 100*current/total;
mc_pts.text = current;
}
resizeCorps(mc_corps, currentCorps, totalCorps)

mc_attaque.onPress = function(){
touche = Math.round(Math.random()*10+1)//recuperer touche aléatoirement
if (touche < 9){//si touche <9 ==> DEGATS
degat = degatArr[Math.round(Math.random()*degatArr.length+1)]; //génération aléatoire des dégats
currentCorps -= (currentCorps >= degat ? degat : currentCorps); //Décrémente la vie de dégats aléatoires
resizeCorps(mc_corps,currentCorps,totalCorps); //Actualise la barre de vie
}else{
trace("coup manqué");
}
}

Je pense que cela devrait fonctionner.

A+

Joni

#28 jonathan.vasseur60

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 140 messages

Posté 26 May 2008 - 13:38 PM

OK, Joni... ton code qui permet de programmer les chances de toucher la cible fonctionne bien... Pas à dire, c'est nickel...

En revanche, il semble y avoir un problème avec les lignes qui programment les dégâts... Je ne connais pas assez ce genre de code pour pouvoir le rectifier par moi-même...

Es-tu sûr qu'il n'y a pas d'erreur sur ces lignes de codes ? Je t'envoie une copie de mon fichier... Si tu as le temps, jettes-y un oeil (ou les deux... icon_biggrin.gif ) et intègre y les commandes de dégâts...
Je pense que ce sera plus simple comme çà !

Tchao !

Fichier(s) joint(s)



#29 Tekkila

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 7355 messages

Posté 26 May 2008 - 13:58 PM

Pardon, j'ai fais une faute de frappe dans le code.

Action Script

var degatsArr:Array = new Array(18,19,20,21,22); //tableau des dégats possibles

C'est degatArr et non degatsArr.

Ça devrait fonctionner maintenant.

A+

Joni

#30 jonathan.vasseur60

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 140 messages

Posté 26 May 2008 - 14:23 PM

Je teste l'anim...
Tu sais pourquoi, à un moment donné, le nombre le points restant se change en "NaN" et que l'anim se bloque, à tel point que les prochains coups au but ne marchent plus ?



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)