Forums Développement Multimédia

Aller au contenu

Besoin d'aide : récupérer une variable pour un calcul dans un clip ✔

CODE Actionscript

4 réponses à ce sujet

#1 Gouj

    Ceinture Jaune

  • Members
  • PipPip
  • 26 messages

Posté 04 April 2013 - 10:41 AM

Bonjour, je suis débutant et je viens demander votre aide afin de résoudre mon petit "problème".

Je rencontre actuellement un problème sur mes variables et je sollicite votre aide afin de résoudre se soucis qui me bloque depuis quelques jours...

Le contexte :

Je suis dans la création avec Flash en AS3 d'un jeu de simulation de gestion de budget durant une année. L'utilisateur a donc un budget et un nombre de ventes réalisées et étapes par étapes des situations sont proposées avec des impacts différents sur le budget et les ventes en fonction de choix effectué par l'utilisateur.

J'ai donc d'aclaré mes variables budget et hl (pour les ventes) sur ma première frame avec le montant de base de chacune :

// déclaration des variables budget et hl
var budget  = Number(270000);
var hl = Number(0) ;

J'ai ensuite des conditions qui impact le budget et/ou les ventes sur chaque frame de situations en fonction de la réponse que l'utilisateur sélectionne :

function condition() {
//si choix 1 selectioner
if ( c1.selected==true && c2.selected==false && c3.selected==false) {
  budget = budget - 70000 ;
  hl = hl - 250 ;
  MAJ_score();
  nextFrame();

}
// si choix 2 selectionner
else if ( c1.selected==false && c2.selected==true && c3.selected==false) {
  budget = budget - 60000 ;
  hl = hl ;
  MAJ_score();
  nextFrame();
}
//si choix 3 selectionner
else if (c1.selected==false && c2.selected==false && c3.selected==true) {
  budget = budget ;
  hl = hl - 250 ;
  MAJ_score();
  nextFrame();
}

Ensuite j'ai une fonction de Mise à jour de mes champs de text dynamique (MAJ_score) pour que l'utilisateur voi en live l'évolution de son budget et de ses ventes :

//Function MAJ des resultats : Affichage des données budget et hl
function MAJ_score () {

budget_txt.text = separateurs_de_milliers(budget) + " €";
hl_txt.text = separateurs_de_milliers(hl) + " hl";
}


Jusqu'ici no soucy ! cela fonction bien, Les calcul sont réalisé correctement fonction du choix de l'utilisateur et les textes dynamique sont mis à jour ! ( je vous épargne les autres codes qui marchent comme la mise en forme conditionnelle du texte, ...)


Le problème :

Mais j'ai des situation ou la chance rentre en jeux (pour mettre un peu de piquant) : quand l'utilisateur choisis une solution cela affiche un clip avec un lancé de dés si le nombre est impair l'utilisateur réussis ca vente et si c'est pair il échoue ...

J'ai donc dans mon clip "dés" un tirage au sort aléatoire avec une nouvelle variable avec le résultat du tirage (VA1) :

var VA1;
lancer_btn.addEventListener(MouseEvent.CLICK, fl_MouseClick);
function fl_MouseClick(event:MouseEvent):void
{ // aléatoire
var valeur_MIN = 1;
var valeur_MAX = 6;
var VA1:Number = Math.round(Math.random()*(valeur_MAX-valeur_MIN+1)+(valeur_MIN-.5));
des_txt.text= VA1.toString() ;

// bouton disparait et autre réaparait
lancer_btn.visible=false;
go_btn.visible=true;
}

Par la suite(toujours dans mon clip "dés") j'ai une condition sur une fonction qui se lance au clic sur le bouton "go_btn"(qui ressemble aux autres avec l'impact en fonction du résultat) :

go_btn.addEventListener(MouseEvent.CLICK, fl_ClickToGoToScene);
function fl_ClickToGoToScene(event:MouseEvent):void
{
  // condition de résultat
if (VA1 == 1 || VA1 == 3 || VA1 == 5) {
  MovieClip(parent).budget = MovieClip(parent).budget ;
  MovieClip(parent).hl = MovieClip(parent).hl - 350  ;
  MovieClip(parent).MAJ_score();
}

else if (VA1 == 2 || VA1 == 4 || VA1 == 6) {
  MovieClip(parent).budget = MovieClip(parent).budget - 75000 ;
  MovieClip(parent).hl = MovieClip(parent).hl   ;
  MovieClip(parent).MAJ_score();
}


MovieClip(this.root).gotoAndPlay(22, "Séquence 1");
}

MAIS CELA NE MARCHE PAS ! enfin la fonction marche car quand je clic sur le bouton j'arrive bien frame 22 de ma séquence 1 mais le budget et les ventes ne change pas...

DE bases mon code était le même que pour les conditions sur ma séquence principal mais lors de la publication on me disais que les variable n'étaient pas définies ... J'ai passé plusieurs heures sur internet à cherché la solution (j'ai trouvé le principe de "MovieClip(parent).Ma_variable") mais cela ne fonctionne toujours pas ... comme si il ne retrouvai pas la variable "budget" et "hl" pour y soustraire les montants....

J'ai également testé avec "MovieClip(this.root).Ma_variable" mais c'est pareil cela ne fonctionne pas ...


Voili Voilou, J'espère avoir été clair dans mon explication :)

J'espère que vous pourrez m'aider (pauvre débutant que je suis) à "débugger" ce "jeu" ...

Merci d'avance ;)

Bonne journée,

#2 Jano 95

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 4558 messages

Posté 04 April 2013 - 11:06 AM

Salut.


var VA1;
lancer_btn.addEventListener(MouseEvent.CLICK, fl_MouseClick);
function fl_MouseClick(event:MouseEvent):void
{ // aléatoire
var valeur_MIN = 1;
var valeur_MAX = 6;
var VA1:Number = Math.round(Math.random()*(valeur_MAX-valeur_MIN+1)+(valeur_MIN-.5));
des_txt.text= VA1.toString() ;
// bouton disparait et autre réaparait
lancer_btn.visible=false;
go_btn.visible=true;
}
 

Tu déclares VA1 à l'intérieur d'une fonction, donc elle est inconnue en dehors de cette fonction.
Déclare ta variable en dehors de la fonction.


var VA1:Number;
lancer_btn.addEventListener(MouseEvent.CLICK, fl_MouseClick);
function fl_MouseClick(event:MouseEvent):void
{ // aléatoire
var valeur_MIN = 1;
var valeur_MAX = 6;
VA1 = Math.round(Math.random()*(valeur_MAX-valeur_MIN+1)+(valeur_MIN-.5));
des_txt.text= VA1.toString() ;
// bouton disparait et autre réaparait
lancer_btn.visible=false;
go_btn.visible=true;
}
 

Essaie cela pour voir.

#3 Gouj

    Ceinture Jaune

  • Members
  • PipPip
  • 26 messages

Posté 04 April 2013 - 11:13 AM

Merci pour ta réponse, mais cela ne fonctionne pas j'ai 2 messages d'erreurs :

Symbole 'dès1', Calque 'Actions', Image 1, ligne 12 1067: Contrainte implicite d'une valeur du type Number vers un type sans rapport Class.

et

Symbole 'dès1', Calque 'Actions', Image 1, ligne 12 1188: Affectation à la classe Number incorrecte.

la ligne 12 c'est la ligne

VA1:Number = Math.round(Math.random()*(valeur_MAX-valeur_MIN+1)+(valeur_MIN-.5));


#4 Jano 95

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 4558 messages

Posté 04 April 2013 - 11:34 AM

Pour cette ligne moi j'avais écrit :

VA1 = Math.round(Math.random()*(valeur_MAX-valeur_MIN+1)+(valeur_MIN-.5));
 


Note : Pour chercher si un nombre est pair ou impair, tu peux utiliser le modulo : %

var n:Number = Math.round(Math.random()*6);
trace(n);
if (n % 2 == 0) {
trace("nombre pair");
} else {
trace("nombre impair");
};
 


#5 Gouj

    Ceinture Jaune

  • Members
  • PipPip
  • 26 messages

Posté 04 April 2013 - 12:21 PM

En effet :roll: ...

ça marche !

Merci beaucoup pour ces réponses rapides et efficaces !

et pour ton "astuce" pour les nombre pair/impair !


Bonne journée



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

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