Calculateur de volume et ba-ba Flash / ActionScript

Calculateur de volume et ba-ba Flash / ActionScript - Flash/ActionScript - Programmation

Marsh Posté le 04-05-2006 à 16:47:16    

Bonjour tlm,
 
je dois réaliser pour un site pro un calculateur de volume, à savoir des objets que je drag & drop dans une boîte, et derrière une petite moulinette va me donner un résultat, en unité de volume donc.
Le truc c'est que je débute là-dedans, et malgré une plongée dans la doc de Flash (version éval de la 8, Pro biensûr :sol:) je reste planté là...
 
Ce que je propose avant toute chose, c'est de faire un topic un peu utile, avec des questions/réponses de base qui je pense pourront en aider d'autres... (cf la doc en question... :ange:)
 
 
Alors vala, j'ai lu les grands principes de Flash, en m'aidant de tutos sur le net (cf...), et j'arrive pour l'instant à faire un truc tout bidon, càd :
- 1 calque
- 1 bouton (inséré dans l'image 1)
- 1 tout pti bout de code AS pour gérer un drag & drop sur ce bouton (4 lignes, wahooo...)
 
Le code marche, ça drag et ça drop, et dans ma scène il n'y a qu'1 seul objet (le bouton)
 
 
Or l'idée est d'aller un peu plus loin, et pour se faire je désirerais pouvoir identifier une intéraction entre :
1. mon bouton en glisser-déposer (drag & drop pour les intimes)
2. mon conteneur-récepteur, la boîte dans laquelle je vais déposer mes objets pour calculer leur volume (plus tard)
 
Au niveau du code j'ai crû apercevoir des choses intéressantes déjà, 1 ou 2 méthodes et/ou attributs qui devront vraisemblablement faire l'affaire.
Le problème pour l'instant est en amont, càd que je n'arrive toujours pas à créer un 2ème objet (ma boîte réceptrice) indépendant du 1er (mon bouton drag & drop)
 
A priori logiquement ça devrait marcher, en fait je crée un symbôle de type "graphique" (dans un 2nd calque) qui symbolise (ahah) mon récepteur, et je le rajoute à la scène.
Et là, quand je "compile", le code drag & drop de mon bouton se propage aussi sur ce graphique, alors que Flash me dit qu'un graphique ne peut pas être contrôlé par ActionScript :sweat:  
 
J'ai testé avec un autre symbôle de type bouton, amarchepo, idem avec le type clip...
 
 
Bref, et pour commencer (en espérant qu'il y aura une suite, dîtes-moi si je suis lourd... :whistle:) j'ai 2 questions :
- pourquoi que ça fait ce que je viens de décrire et pas ce que je pense que ça devrait faire ?
- j'ai pas mal cherché après une définition du type "clip" (utilisé dans des tutos de drag & drop sur le net), mais je reste toujours dubitatif...
 
MERCI D'AVANCE

Reply

Marsh Posté le 04-05-2006 à 16:47:16   

Reply

Marsh Posté le 04-05-2006 à 19:15:31    

Bon, vais continuer à parler tout seul... :sweat: Si jamais ça intéresse quelqu'un... :hello:  
 
Alors, grande découverte, qui soulève une interrogation encore plus grande (la même que dans mon 1er post, toujours à propos de ce type "clip" ).
Je commence par la nouvelle, enfin pour moi :
 
J'ai créé un 3ème objet, de type "clip" donc, dans lequel j'ai inséré mon bouton drag & drop.
J'ai tout viré dans ma scène, j'y remets mon nouvel objet clip+bouton, et également mon conteneur-récepteur (de type graphique)
Après "compilafion", je teste, ça marche ! Seul mon clip+bouton fait du drag & drop :sol:  
 
Pour info mon code de drag sur le bouton est (des plus classiques) :

Code :
  1. on (press)
  2. {
  3.       startDrag(this,false);
  4. }

C'est à ce niveau là que je bloquais (dans ma tête), càd que l'argument this devait dans le 1er cas faire référence à tous les symbôles de ma scène, enfin je suppose en tout cas qu'il était interprêté de manière assez globale, et donc prenait en compte tous les objets de ma scène, de type "bouton" comme de type "graphique" (bien que ce dernier ne puisse apparemment pas subir d'action en provenance du code ActionScript).
 
Cette fois-ci, en incluant mon bouton avec action drag & drop en AS à l'intérieur d'un objet de type "clip", la référence à this a manifestement changé, et ne décrit plus QUE le clip+bouton qu'il contient. D'où l'obtention de l'action souhaitée, càd le drag & drop QUE sur le bouton (dans son "conteneur" isolé "clip" ).
 
Bon, maintenant que ça marche, j'aimerais savoir si j'ai bon... :whistle:
Et aussi : quelqu'un pourrait me donner une vraie définition de ce qu'est un "clip" en Flash 8 ?

Reply

Marsh Posté le 05-05-2006 à 11:34:27    

ca depend ou tu colle ton code:
-> si tu le mets sur un bouton this c'est le bouton est rien que lui
-> si tu le mets sur une frame, this fera reference au conteneur de la frame (sur la premiere image clé de la scene principale this = _root = _level0)
 
apres:
-> un graphique: c'est un element "pour faire joli" auqeul tu ne pourras jamais faire quoi que ce soit niveau prog (ca ne sert a rien d'autres que grouper des elements et les nommer dans la bibilotheque)
-> un bouton: c'est un clip "special" avec seulement 4 frame correspondant au trois états (normal, survol, clic plus une frame pour la zone cliquable)
-> un clip enfin c'est l'élements de base si tu fait de la programmation (personnellement je n'utilise presque que ca même pour faire des boutons)
 
http://www.yazo.net


---------------
D3
Reply

Marsh Posté le 10-05-2006 à 17:32:46    

ok, je commence à voir un peu...
 
bon, je me remets dessus là (vive le multi-tâche... :sarcastic:), et de nouvelles questions surgissent :
 
j'ai fait un bouton B avec les 4 images-clés et un petit texte différencié sur chacune. Je le teste, ça marche.
Après ça je crée un clip dans lequel j'insère mon bouton B et mon code drag & drop. Je le teste, et ça marche pas, le bouton ne réagit plus, comme s'il perdait ses propriétés. Pourquoi ?
 
En attendant, je retourne bouquiner... +

Reply

Marsh Posté le 16-05-2006 à 01:18:37    

up :sweat:

Reply

Marsh Posté le 22-06-2006 à 10:24:26    

Re :hello:  
 
Ayé c'est fait, maintenant j'essaie de peaufiner (décrasser plutôt :whistle:) mon code...
A chaque objet que je drag & drop dans la boîboîte celle-ci m'affiche le nouveau volume total calculé, et j'ai des compteurs qui me donnent les quantités cumulées par objet inséré, histoire de suivre le fil.
Sur le côté j'ai également fait un listing des objets -triés par rubrique- qui ont déjà été insérés, encore une fois dans un but de plus grande lisibilité pour l'utilisateur. Et j'en viens à mon blocage, à propos de cet affichage :
 
je réaffiche l'intégralité de ma liste à chaque drag & drop réussi, càd que je me coltine le code pour afficher ce listing dans chaque objet drag & drop-able, et c'est plutôt lourd... Dès que je fais une modif sur cet affichage, je dois faire copier/coller dans tous mes objets pour répercuter le nouveau code, bref ça pue :o  
 
J'ai essayé de créer un calque d'1 seule image afin d'y insérer ma fonction Affichage(), et de l'appeler dans le on (release) de chaque objet, mais ça n'affiche rien... Et je ne vois pas pourquoi...
PS: j'utilise ce même calque d'1 seule image pour initialiser mes tableaux et compteurs, et je pensais que ça pouvait marcher aussi pour des fonctions... :pfff:

Reply

Marsh Posté le 22-06-2006 à 14:35:20    

Je donne le code

Code :
  1. function affichage()
  2. {
  3. _root.label_listemeubles.text="";
  4. if (_root.label_listemeubles.text.indexOf(_global.meubles_sejour[0]) == -1)
  5.  _root.label_listemeubles.text+=_global.meubles_sejour[0]+"\n";
  6. listeln=_global.meubles_sejour.length;
  7. for (i=1;i<listeln;i++)
  8.  if (_global.meubles_sejour)
  9.   _root.label_listemeubles.text+=_global.meubles_sejour[i]+"\n";
  10. _root.label_listemeubles.text+="\n";
  11. if (_root.label_listemeubles.text.indexOf(_global.meubles_chambre[0]) == -1)
  12.  _root.label_listemeubles.text+=_global.meubles_chambre[0]+"\n";
  13. listeln=_global.meubles_chambre.length;
  14. for (i=1;i<listeln;i++)
  15.  if (_global.meubles_chambre[i])
  16.   _root.label_listemeubles.text+=_global.meubles_chambre[i]+"\n";
  17. }

Quand ce code est directement contenu dans l'évènement [i]on (release) de chacun des clips meubles, ça fonctionne (normal)
 
Quand je mets ce code dans la fonction affichage() de l'image-clé 1 d'un calque à part (dans lequel je fais également mes init), et que je le remplace par affichage() dans chacun des clips meubles, ça ne fonctionne po...
 
J'ai testé aussi affichage.apply() ou affichage.call(), marche po non plus (ça c'est ptet normal, j'ai po bien regardé)
 
Quelqu'un a une idée de solution ?

Reply

Marsh Posté le 17-07-2006 à 13:44:28    

ca devrait fonctionner si tu mets _root.affichage() dans ton onRelease (si affichage a ete declaré sur le timeline principal bien sur)


---------------
D3
Reply

Sujets relatifs:

Leave a Replay

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