Forums Développement Multimédia

Aller au contenu

Création d'une barre de vies

CODE

14 réponses à ce sujet

#1 Marti73

    Ceinture Blanche

  • Members
  • Pip
  • 7 messages

Posté 01 December 2012 - 15:31 PM

bonjour à tous,

Est ce que quelqu'un sait comment on peut réaliser une barre de vies en As3 par exemple si je dispose de 5 vies au début la barre est à 100% puis quand ça je pers une vie (4/5) la barre passe à 75%?

Merci ;)

#2 aeroglissman

    Ceinture Jaune

  • Members
  • PipPip
  • 21 messages

Posté 01 December 2012 - 18:35 PM

Slt Marti73,

As-tu un FLA à fournir ?
As-tu créé graphiquement ta barre de vie ?

Pour créer le code approprié, il faut avoir plus d'infos sur le contexte...
Par exemple quelles sont les actions qui interviennent sur la barre de vie...
C'est en forgeant qu'on devient forgeron et c'est en cherchant qu'on devient moins con....

#3 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 01 December 2012 - 19:29 PM

Salut et bienvenue,

Il faut juste connaitre les bases de Flash : créer un movieClip et lui donner un nom
Et les maths niveau CM1 : calculer un ratio

Ensuite en réfléchissant trois secondes :

Total vies = 5
Taille barre de vie = 150
Ratio : 150/5 = 30
A chaque vie perdue, le clip de la barre de vie se réduit de 30 pixels...

En code ?

var ratio:Number = barreVie.width / totalVies;

if (perdVie) {
vies--;
barreVie.width -= ratio;
}
 


#4 Marti73

    Ceinture Blanche

  • Members
  • Pip
  • 7 messages

Posté 02 December 2012 - 16:47 PM

Voici mes fichiers .fla et .swf

je vais essayer de faire comme tu m'as dit Mr Spi

Fichier(s) joint(s)



#5 Marti73

    Ceinture Blanche

  • Members
  • Pip
  • 7 messages

Posté 02 December 2012 - 16:55 PM

en tout cas ça fait plaisir d'avoir des reponses rapides, je desespérais sur les autres forums! :)

J'essaye d'améliorer mon jeu au maximum dans le but de le mettre en ligne, je suis preneur de tout conseil ;)

je pense que j'aurais d'autres questions une fois l'histoire de la barre de vie réglé.

merci

#6 Marti73

    Ceinture Blanche

  • Members
  • Pip
  • 7 messages

Posté 04 December 2012 - 14:37 PM

Avec le code suivant: j'ai mon err_txt.text qui affiche bien le nombre de vies qu'il reste lorsque j'en perd une mais la barre elle ne fonctionne pas... le fichier ne me détecte aucune erreur

public class Main extends MovieClip
{
var vies:int=5;
var totalVies:int=vies;
var ratio:Number=barreVie.width/totalVies
etc...
}

etc...

if (alien.y > stage.stageHeight)
{
perdu.gotoAndPlay('loose');
vies--;
removeChild(alien);
addChild(alien);
alien.x = randomX;
alien.y = - alien.height;
err_txt.text = vies + '/' + totalVies;
barreVie.width-=ratio;
}

#7 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 04 December 2012 - 14:57 PM

Bonjour Marti.
Est-ce que tu n'aurais pas une erreur 1009 par hasard ?

Il faudrait voir la classe entier, mais tu ne peux pas faire :
var ratio:Number=barreVie.width/totalVies
si barreVie est un clip posé sur la scène car au moment de la déclaration des variables, barreVie n'existe pas.

A l'inverse, si tu as mis cette ligne la dans le constructeur, ratio de vient une variable locale au constructeur et elle n'aura plus de valeur dans l'autre fonction.
Tu dois couper la poire en 2 :
- déclarer la variable aussitôt la déclaration de la classe
- donner sa valeur à la variable dans le constructeur.

public class Main extends MovieClip
{
  var vies:int = 5;
  var totalVies:int = vies;
  var ratio:Number; // Je le déclare
  public function Main():void
  {
   ratio = barreVie.width / totalVies; // Je le valorise
   bouton.addEventListener(MouseEvent.CLICK,dead);
  }
  function dead(event:MouseEvent):void
  {
   vies--;
   err_txt.text = vies + '/' + totalVies;
   barreVie.width -= ratio;
  }
}


#8 Marti73

    Ceinture Blanche

  • Members
  • Pip
  • 7 messages

Posté 04 December 2012 - 15:46 PM

J'ai essayer avec se que tu m'as dit... mais j'ai un problème avec la définition de barreVies

Voici l'intégralité du projet en pièce jointe avec l'erreur... je suis sur que c'est un truc tout con en plus...

Fichier(s) joint(s)



#9 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 04 December 2012 - 17:29 PM

Désolé.

1 Je ne peux pas ouvrir les fichier récents.
2. Ça serait mieux pour toi et pour nous, que tu isoles la partie qui bug plutôt que de tout fournir.

3. Si tu as un message d'erreur, il suffirait probablement que tu le cites pour qu'on y vois plus clair.

#10 Marti73

    Ceinture Blanche

  • Members
  • Pip
  • 7 messages

Posté 04 December 2012 - 17:42 PM

Oups! pardon je suis un peu noob niveau forum, désolé...

alors l'erreur est de type 1120: Accès à la proprièté non défini barreVie
mon occurence de clip s'appel barreVie.

et niveau code ça donne ça:

public class Main extends MovieClip
        {
         var vies:int = 5;
                var totalVies:int = vies;
                var ratio:Number;
        }

function startGame(event:MouseEvent):void
                {
                 err_txt.text = vies + '/' + totalVies;
                        ratio = barreVie.width / totalVies;
                 }

if (alien.y > stage.stageHeight)
                        {
                         vies--;
                         err_txt.text = vies + '/' + totalVies;
                                ratio = barreVie.width / totalVies;

                        }
en espérant que ça pourra t'éclairer

Modifié par Krevare, 05 December 2012 - 13:52 PM.
Ajout des balises de code.


#11 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 04 December 2012 - 17:53 PM

Généralement, si Flash te dit qu'il n'y a pas de barreVie, c'est lui qui a raison.

- vérifier une nouvelle fois le nom (au besoin faire un copier/coller)
- le clip barreVie ne doit pas être à l'intérieur d'un autre clip, sinon il faut faire nomDeLAutreClip.barreVie

Ensuite, le code à partir du if ne peut pas fonctionner, il doit être inclu dans une fonction, associée à un écouteur ou quelque-chose, sinon ce code est exécuté à l'initialisation de la classe elle même, et pas de l'occurrence. Donc, là, oui, barreVie n'existe pas encore et ça pourrait expliquer l'erreur.

Je te joins le fichier ou j'ai testé le code que je t'ai donné plus haut.

Fichier(s) joint(s)

  • Fichier joint  test.zip   380.18 Ko   18 téléchargement(s)


#12 Marti73

    Ceinture Blanche

  • Members
  • Pip
  • 7 messages

Posté 04 December 2012 - 17:57 PM

merci je vais voir ;)

#13 aeroglissman

    Ceinture Jaune

  • Members
  • PipPip
  • 21 messages

Posté 04 December 2012 - 20:30 PM

Slt Marti73, Dldler,

Si je ne m'abuse, une classe est définie comme suit:


package
{
public class Main extends MovieClip
{
public function Main():void
{
et le code ici
}
 

A voir de ce côté là...
C'est en forgeant qu'on devient forgeron et c'est en cherchant qu'on devient moins con....

#14 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 04 December 2012 - 20:48 PM

Salut,

Je ne vois pas l'intérêt de faire une classe pour gérer une barre de vie si le reste du programme n'est pas orienté POO.

Si on reprend la question de départ :

Citation

Est ce que quelqu'un sait comment on peut réaliser une barre de vies en As3 par exemple si je dispose de 5 vies au début la barre est à 100% puis quand ça je pers une vie (4/5) la barre passe à 75%?

Je ne suis pas sur que la POO soit la réponse à la question, mais je me trompe peut-être.

#15 hu9o

  • Members
  • PipPipPipPipPipPipPipPip
  • 653 messages

Posté 02 January 2013 - 22:15 PM

Sans POO, il faudrait que tu appelles cette fonction pour changer la vie (au lieu de modifier nbVies directement) :
function setVies(n:int)
{
  nbVies = n;
  barreVie.scaleX = n/maxVies;
}
En créant maxVies si elle n'existe pas, ou même en la remplaçant par une valeur littérale.

--------

Sinon je trouve ça plus classe :
var _nbVies:int = maxVies;
function set nbVies(n:int)
{
  _nbVies = n;
  barreVie.scaleX = n/maxVies;
}
function get nbVies():int { return _nbVies; }
vous en pensez quoi ?



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

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