FLASH : Noob need help

Statut
N'est pas ouverte pour d'autres réponses.

Eden

GamerZ2008
Hello all,


J'explique mon pb...

J'aimerai que quand je clique sur un objet (bouton), l'image de celui-ci s'affiche dans un movie clip nommé "bouton01" si celui-ci est vide. (vide = frame14)
L'objet s'afficherai à la frame15, par exemple, du clip bouton01 donc.

Puis, je voudrai que si j'appuie sur un 2ème objet, que son image apparaisse soit sur le clip "bouton01" si celui-ci est vide (frame14) soit sur un 2ème clip nommé "bouton02" si le premier clip n'est pas vide. (frame>14)


Voici le code :

Objet 1 :

on(release){
if (_root.bouton01._currentframe=14){_root.bouton01.gotoAndStop(15);}
else {_root.bouton02.gotoAndStop(15);
}}



Objet 2 :


on(release){
if (_root.bouton01._currentframe=14){_root.bouton01.gotoAndStop(16);}
else {_root.bouton02.gotoAndStop(16);
}}



Alors, les objets apparraissent bien sur le premier clip... mais quand il y a déjà un objet affiché sur le premier clip, le second objet ne s'affiche pas sur le second clip.

Donc, si quelqu'un peut m'aider avec le code :p (désolé de mon noobisme :oops: )
 

[L56]

Elite
Salut,

Je suis pas sure de tout comprendre, mais dans ton code, y'a déjà un truc qui est pas juste, c'est l'équivalence dans ta condition.

Alors, "= " c'est une affectation et "==" c'est une équivalence

comme dans la pluspart des langages je pense...

[L56]
 
1er
OP
Eden

Eden

GamerZ2008
[L56] a dit:
Alors, "= " c'est une affectation et "==" c'est une équivalence

Oué ca marche^^

C'était juste le petit = qui manquait. Merci beaucoup :)
 

Sedeete

NEOLIKE
[L56], une sorte de ouf qui répond à toutes les questions sur le flash :D

Merci, tu m'as souvent sortis du pétrin ces derniers temps aussi ^^
 

[L56]

Elite
mé 2 rie1, moi aussi j'ai commencé un jour, et d'autres m'ont aidé... :)
 
1er
OP
Eden

Eden

GamerZ2008
Re besoin d'aide pour stuff de noob encore une fois.


Voilà, dans mon animation flash... on contrôle un savant qui avec genre de scanenr s'amuser à scanner les molécules des objets. Les molécules sont stockés dans des capsules...

Il y a 3 capsules en tout et donc je voudrais qu'une fois que les 3 capsules sont remplies, on puisse jouer l'animation de fin et selon le résultat obtenu, que la fin soit différente.


Donc, je me dis que je dois faire un bouton qui doit additionner des valeurs (1 pour chaque objet) et selon la somme obtenue, jouer la bonne frame.
Mais étant noobzor, je ne sais pas comment affecter un valeur à un objet. :oops:


Donc, pour ceux qui auraient un peu de temps pour répondre. Je voudrais avoir la marche à suivre + un exemple de code.


Voilà l'animation pour vous faire une idée de ce que je veux.
http://img181.imageshack.us/my.php?image=cellscanlf0.swf


Merci d'avance à ceux qui pourront m'aider. :)
 

[L56]

Elite
Salut,

Voyons, si j'ai bien compris...

Bon, en fait, pour la jouer efficace, je te conseille de bosser en AS2(ou en AS3, mais il te faudra Flash9 pour le compiler, donc restons en AS2)

Tu écris une petite classe ridicule genre ceci :

Code:
Class MonObjet extends MovieClip { //class héritant de MovieClip
   private var monEtat:Boolean; //déclaration d'une var booleènne

   function MonObjet(){  //constructeur
      monEtat=false;
   }

   public function set changeEtat(_datas:Boolean):Void {
      monEtat=_datas;
   }
}
Sauves cette classe dans un répertoire "/class" au même niveau que ton fla pour faire simple pour le moment (le nom de la classe doit bien sur être "MonObjet.as", tu la nommes comme tu veux, du moment que la première lettre soit une majuscule)

Tes objets à scanner doivent être de MovieClip.
Dans la bibiothèque, tu fait un click droit sur tes 3 objets, tu choisis "liaison", tu coches la case "exporter pour AS2", et dans le champs tu mets : "class.MonObjet" (sans les guillemets et sans le ".as" ;) )

A présent, tu disposes d'une classe avec une propriété "changeEtat".

Donc, imaginons que ton Dr Maboule soit face à la plante, lors du click sur le bouton, tu dervas faire dans ton fla:

Code:
tonBouton.onPress=function() {
   _root.plante_mc.changeEtat=true;
   if (_root.plante.chanteEtat && _root.trucBidule.changeEtat && _root.machinBazor.changeEtat) {
      ici ton code pour jouer l'animation;
   }
}
Voila, l'avantage de cette méthode est que si plus tard, tu a 50 objets à scanner (ou plus...), tu n'aurra qu'a répéter ces operation, ce qui sera une ENOOOOOOOORME écconomie de code...

Si ca va pas, n'hésite pas...

A++
 

[L56]

Elite
[L56] a dit:
Salut,

Voyons, si j'ai bien compris...

Bon, en fait, pour la jouer efficace, je te conseille de bosser en AS2(ou en AS3, mais il te faudra Flash9 pour le compiler, donc restons en AS2)

Tu écris une petite classe ridicule genre ceci :

Code:
Class MonObjet extends MovieClip { //class héritant de MovieClip
   private var monEtat:Boolean; //déclaration d'une var booleènne

   function MonObjet(){  //constructeur
      monEtat=false;
   }

   public function set changeEtat(_datas:Boolean):Void {
      monEtat=_datas;
   }
}
Sauves cette classe dans un répertoire "/class" au même niveau que ton fla pour faire simple pour le moment (le nom de la classe doit bien sur être "MonObjet.as", tu la nommes comme tu veux, du moment que la première lettre soit une majuscule)

Tes objets à scanner doivent être de MovieClip.
Dans la bibiothèque, tu fait un click droit sur tes 3 objets, tu choisis "liaison", tu coches la case "exporter pour AS2", et dans le champs tu mets : "class.MonObjet" (sans les guillemets et sans le ".as" ;) )

A présent, tu disposes d'une classe avec une propriété "changeEtat".

Donc, imaginons que ton Dr Maboule soit face à la plante, lors du click sur le bouton, tu dervas faire dans ton fla:

Code:
tonBouton.onPress=function() {
   _root.plante.changeEtat=true;
   if (_root.plante.chanteEtat && _root.trucBidule.changeEtat && _root.machinBazor.changeEtat) {
      ici ton code pour jouer l'animation;
   }
}
Voila, l'avantage de cette méthode est que si plus tard, tu a 50 objets à scanner (ou plus...), tu n'aurra qu'a répéter ces operation, ce qui sera une ENOOOOOOOORME écconomie de code...

Si ca va pas, n'hésite pas...

A++

[EDIT]

La classe doit bien sure être écrite dans un fichier à part.
Je te conseille l'editeur SEPY (gratuit) pour les classe AS, mais tu peux tout aussi bien les écrires avec Flash (nouveau fichier AS)

[/EDIT]
 

[L56]

Elite
RHAAAAAAA, ce PUT*IN DE BOUTON "CITER"!!! :mad: :mad: :mad: :mad: :mad: :mad: :mad:
 
1er
OP
Eden

Eden

GamerZ2008
Thx pour cette réponse rapide :=)

Je vais tester ca, je dois avouer ne pas tout comprendre en lisant le code mais je manque de pratique et de connaissances flash. D'ailleurs le AS2 m'est inconnu comme terme flash :p .


Mais en chipotant un peu, je devrai y arriver gràce à ton aide. Merci encore :) :) :)
 

[L56]

Elite
AS2 veux simplement dire Action Script 2.

L'action Script 1 date de Flash 5 si j'ai bonne souvenance...

L'action Script 2 est apparu avec Flash 7.

L'action Script 3 quand à lui viens d'arriver avec Flash 9.

La grosse différence entre le 1 et le 2 est qu'en 2 tu peux bosser avec des classes comme avec n'import quelle language orienté objet. Ce qui implique qu'il est entre autre possible de développer de grosse applications Flash en évitant de coder dans le fichier .fla ce qui est nettement plus gérable...

[L56]
 
1er
OP
Eden

Eden

GamerZ2008
Hello again :p


Vu que ma noobzoorerie n'a pas de limite... j'ai encore un probème avec le code. :oops:



Voilà, quand on scanne un objet, celui-ci s'affiche dans un un movie clip. (avec une condition _currentframe)

Puis, selon le currentframme du movie clip, celui-ci prend des valeurs genre 2, 3 , 4 ou 30 etc...

Et pour jouer les fins, on clique sur un bouton qui va, selon la somme de la valeur des 3 movies clips, jouer tel ou telle fin.



Voici mon code :

Pour les movies clip (le cap01 change en fonction du clip)


Code:
onClipEvent (load) {
	valeur = 0;
}
onClipEvent (enterFrame) {
	if (_root.cap01._currentframe == 19) {
		valeur = 34;
	} else if (_root.cap01._currentframe == 22) {
		valeur = 10;
	} else if (_root.cap01._currentframe == 30) {
		valeur = 11;
	} else if (_root.cap01._currentframe == 31) {
		valeur = 2;
	} else if (_root.cap01._currentframe == 33) {
		valeur = 3;
	} else if (_root.cap01._currentframe == 34) {
		valeur = 4;
	} else if (_root.cap01._currentframe == 35) {
		valeur = 35;
	} else if (_root.cap01._currentframe == 36) {
		valeur = 36;
	} else if (_root.cap01._currentframe == 37) {
		valeur = 12;
	} else if (_root.cap01._currentframe == 14) {
		valeur = 0;
	} else {
		valeur = 1;
	}
}

Et le code du bouton pour jouer les fins :


Code:
on (release) {
	if (_root.cap01.valeur == 0 or _root.cap02.valeur == 0 or _root.cap03.valeur == 0) {
		_root.ending.gotoAndPlay(42);
	} else if (_root.cap01.valeur+_root.cap02.valeur+_root.cap03.valeur == 9) {
		_root.ending.gotoAndPlay(2);
	} else if (_root.cap01.valeur+_root.cap02.valeur+_root.cap03.valeur == 33) {
		_root.ending.gotoAndPlay(17);
	} else if (_root.cap01.valeur+_root.cap02.valeur+_root.cap03.valeur == 105) {
		_root.ending.gotoAndPlay(32);
	} else {
		_root.ending.gotoAndPlay(42);
	}
	_root.sound_cp.gotoAndPlay(66);
}



Si quelqu'un sait me dire à quel moment ca coince, ca m'aiderait beaucoup.
Merci d'avance^^
 

[L56]

Elite
Salut,

dans un premier temps pour ton OR dans l'aide de flash, il est dit :

"Déconseillé depuis Flash Player 5. Cet opérateur a été déconseillé en faveur de l'opérateur || (logical OR)."

La calsse que je t'ai donnée l'autre fois n'était pas juste : voici le bon code :

Code:
import mx.utils.Delegate; // pour la délégation d'évenements

class classes.BoutonBascule extends MovieClip { //cette classe étend la classe MovieClip
	
	private var bascule:Boolean;  // on déclare une variable booleenne
	
	function BoutonBascule() { //constructeur de la classe
		bascule=false;
	}
	
	function onLoad() { //lorsque le clip se charge dans Flash
		this.onPress=Delegate.create(this,goTrue); //j'aurrais pu mettre le onPress dans le onLoad, mais je trouve ça dégueulasse!!!		
	}
	
	private function goTrue() {	// si on click sur le bouton, la variable "bascule" passe à "true"
		bascule=true;
	}
	
	public function get etat():Boolean { //propriété état qui renvoie la valeur de la variable bascule		
		return bascule;
	}	
	
}

Je vais regarder ton code de plus prèt...


JE NE SAIS PAS QUI T'APPRENDS A PROGRAMMER EN FLASH COMME CA, MAIS JE VAIS METTRE UN CONTRAT SUR SA TETE!!! :mad: :mad: :mad:
 

[L56]

Elite
tu me donnes plein d'info là, mais pourrais tu me préciser exactement ce qui ne vas pas?

Ton clip cap01 se positionne t'il bien sur la bonne frame?

Je suppose que ton bouton ne joue pas la bonne anim, mais j'ai besoin de savoir ce qu'!il en est pour cap01... :-'
 

[L56]

Elite
Dans ton preloader, tu as mis play(2).

La méthode play() n'attend jamais d'argument...je n'en ai d'ailleur pas mis dans l'exmple que je t'ai envoyé...
 
1er
OP
Eden

Eden

GamerZ2008
[L56] a dit:
tu me donnes plein d'info là, mais pourrais tu me préciser exactement ce qui ne vas pas?

Ton clip cap01 se positionne t'il bien sur la bonne frame?

Je suppose que ton bouton ne joue pas la bonne anim, mais j'ai besoin de savoir ce qu'!il en est pour cap01... :-'

Beh en fait, en fonction du currentframe de chaque clip capsule (cap01, cap02 et cap03), les movie clips capcule se voient attribuer une valeur différente de 0.

Et le bouton proceed calcule la somme des 3 movie clips et selon la somme obtenue, une fin est joué.
Le problème, c'est que quelque soit la somme... il joue toujours la même fin. (celle de la somme 105)




Sinon, pour le loader ca marche mais je comprend pas la fonction "delete".
Puisque la condition dit que dès que le % == 100 il faut jouer (dans mon cas) _root.gotoAndPlay(2) et donc, j'ai viré la commande "delete" pour tester et ca jouait quelques frames du début en boucle. :p
 
1er
OP
Eden

Eden

GamerZ2008
Oki, j'ai rien dit.

Le problème était une mauvaise frame de la 4ème fin qui commence à la frame 47 et moi j'avais demandé de jouer la frame 42 ^^'

Petite erreur d'inattention de ma part :oops:
 

[L56]

Elite
Le delete est là pour dézinguer le onEnterFrame.
Si tu ne le delete pas lorsque la condition est remplie, il continue à tourner en mémoire, et donc réitère la procédure et bouffe du temps CPU pour rien...

Il faut TOUJOURS tuer un évenement onEnterFrame quand on en à plyus besoin ;)

[L56]
 
1er
OP
Eden

Eden

GamerZ2008
Ah oki doki, c'est bon à savoir. :)


Sinon, j'aurai surement d'autres questions ce soir pour qui voudra bien répondre. (je sais j'abuse :oops: )
 
1er
OP
Eden

Eden

GamerZ2008
Questions 1 :

Comment faire un compte à rebours?


Questions 2 :

J'ai créé un perso sur une map qui fait plusieurs écrans, je sais déplacer le perso mais l'écran reste fixe. ^^'


Cette fois, c'est pour un petit jeu avec un lapin... :)
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut