Site complet en flash : part 6

Retrouvez ici les topics qui font suite aux cours présentés sur explainMe. Si vous avez des questions par rapport aux cours, des remarques ou encore des infos à ajouter, c'est ici.

Site complet en flash : part 6

Messagepar explainMe sur Ven 11 Sep 2009 18:22

Topic relatif au cours Site complet en flash : part 6.

N'hésitez pas à poser vos questions ou débattre d'un sujet relatif au cours.
"If you can't explain it simply, You don't understand it well enough."

www.explain-me.com | forum.explain-me.com | infoTRASH
Avatar de l’utilisateur
explainMe
Administrateur
 
Messages: 267
Inscrit le: Ven 03 Oct 2008 19:09
Localisation: Toulouse
Reputation points: 4
Add reputation pointSubtract reputation point
Nombre de post utiles: 1

Re: Site complet en flash : part 6

Messagepar Muktaditi sur Mer 11 Nov 2009 09:19

Bonjour... déjà bloquée :?

J'en suis donc là...: j'ai crée comme tu l'indiques un clip préchargement dans mon clip interface...

mon code as3 de interface :
Code: Tout sélectionner
//
//--------------------------------------------- Initialisations ---//
//
//
//--- Importation de la class Tween ---
//
import fl.transitions.*;
import fl.transitions.easing.*;
//
//--- Position initiale du curseur ---
//
var posInitCurseur:Number = menu1.curseur.x;
var posInitSousMenu:Number = menu1.sousMenu.y;
var posInitEtoile:Number = menu1.sousMenu.etoile.x;
this.prechargement.visible=false;
this.contenu.categorie = new String();

//
//------------------------------------------- Animation du menu ---//
//
//
//--- Fonction deplaceCurseur ---
//
function deplaceCurseur(event:MouseEvent) {
   var translationCurseur:Tween = new Tween(menu1.curseur, "x", Strong.easeOut, menu1.curseur.x, event.currentTarget.x, 1, true);
}
//
//--- Fonction initCurseur ---
//
function initCurseur(event:MouseEvent) {
   var translationCurseur:Tween = new Tween(menu1.curseur, "x", Strong.easeOut, menu1.curseur.x, posInitCurseur, 1, true);
}
//
//--- Fonction deplaceSousMenu ---
//
function deplaceSousMenu(event:MouseEvent) {
   var translationSousMenu:Tween = new Tween(menu1.sousMenu, "y", Strong.easeOut, menu1.sousMenu.y, -65, 1, true);
}
//
//--- Fonction initSousMenu ---
//
function initSousMenu(event:MouseEvent) {
   var translationSousMenu:Tween = new Tween(menu1.sousMenu, "y", Strong.easeOut, menu1.sousMenu.y, posInitSousMenu, 1, true);
}
//
//--- Fonction deplaceEtoile ---
//
function deplaceEtoile(event:MouseEvent) {
   var translationEtoile:Tween = new Tween(menu1.sousMenu.etoile, "x", Strong.easeOut, menu1.sousMenu.etoile.x, event.currentTarget.x, 1, true);
}
//
//--- Fonction initEtoile ---
//
function initEtoile(event:MouseEvent) {
   var translationEtoile:Tween = new Tween(menu1.sousMenu.etoile, "x", Strong.easeOut, menu1.sousMenu.etoile.x, posInitEtoile, 1, true);
}

               //--- chargement sous-partie : autres boutons ---
   switch (event.currentTarget) {

      case menu1.bPresentation :
         chargeSousPartie("presentation.swf","");
         break;

      case menu1.bRealisations :
         chargeSousPartie("realisations.swf", "design");
         break;

      case menu1.bLiens :
         chargeSousPartie("liens.swf", "");
         break;

      case menu1.bContact :
         chargeSousPartie("contact.swf", "");
         break;
   }

//
//--------------------------------- Chargement des sous-parties ---//
//
function chargeSousPartie(sections:String, categorieXML:String) {
   //--- On vide le conteneur ---
   while (this.contenu.numChildren > 0) {
      this.contenu.removeChildAt(0);
   }
   //--- On redéfinit la catégorie à charger : pour le clip enfant ---
   contenu.categorie=categorieXML;
   // création du chargeur
   var chargeur:Loader = new Loader();
   //--- url à atteindre ---
   var chemin:URLRequest=new URLRequest(sections);
   //--- chargement du contenu ---
   chargeur.load(chemin);
   //--- ajout à la liste d'affichage : lancement du chargement ---
   contenu.addChild(chargeur);
   //--- Ecouteurs ---
   chargeur.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, prechargeSections);
   chargeur.contentLoaderInfo.addEventListener(Event.COMPLETE, finChargementSections);
}
//
//--- Fonction prechargement clips ---
//
function prechargeSections(evt:Event) {
   prechargement.visible=true;
   prechargement.pourcentage.text= Math.floor(100/(evt.currentTarget.bytesLoaded*evt.currentTarget.bytesTotal))+'%';
}
//
//--- Fonction fin de prechargement ---
//
function finChargementSections(evt:Event) {
   prechargement.visible=false;
}

//
//----------------------------------------- Actions des boutons du menu---//
//
//
//--- bPresentation ---
//
this.menu1.bPresentation.addEventListener(MouseEvent.MOUSE_OVER, deplaceCurseur);
this.menu1.bPresentation.addEventListener(MouseEvent.MOUSE_OUT, initCurseur);
this.menu1.bPresentation.addEventListener(MouseEvent.CLICK, initSousMenu);
//
//--- bRealisations ---
//
this.menu1.bRealisations.addEventListener(MouseEvent.MOUSE_OVER, deplaceCurseur);
this.menu1.bRealisations.addEventListener(MouseEvent.MOUSE_OUT, initCurseur);
this.menu1.bRealisations.addEventListener(MouseEvent.CLICK, deplaceSousMenu);
//
//--- bLiens ---
//
this.menu1.bLiens.addEventListener(MouseEvent.MOUSE_OVER, deplaceCurseur);
this.menu1.bLiens.addEventListener(MouseEvent.MOUSE_OUT, initCurseur);
this.menu1.bLiens.addEventListener(MouseEvent.CLICK, initSousMenu);
//
//--- bContact ---
//
this.menu1.bContact.addEventListener(MouseEvent.MOUSE_OVER, deplaceCurseur);
this.menu1.bContact.addEventListener(MouseEvent.MOUSE_OUT, initCurseur);
this.menu1.bContact.addEventListener(MouseEvent.CLICK, initSousMenu);

//
//----------------------------------------- Actions des boutons du sous menu---//
//
//
this.menu1.sousMenu.bDesign.addEventListener(MouseEvent.MOUSE_OVER, deplaceEtoile);
this.menu1.sousMenu.bDesign.addEventListener(MouseEvent.MOUSE_OUT, initEtoile);

this.menu1.sousMenu.bMusique.addEventListener(MouseEvent.MOUSE_OVER, deplaceEtoile);
this.menu1.sousMenu.bMusique.addEventListener(MouseEvent.MOUSE_OUT, initEtoile);

this.menu1.sousMenu.bDirArt.addEventListener(MouseEvent.MOUSE_OVER, deplaceEtoile);
this.menu1.sousMenu.bDirArt.addEventListener(MouseEvent.MOUSE_OUT, initEtoile);


mon code as3 de realisations :
Code: Tout sélectionner
//
//---------------------------------------------------------------- INITIALISATIONS ---//
//
var realisationsXML:XML;
var chargeDonnees:URLLoader = new URLLoader();
var adresseFichier:URLRequest=new URLRequest("XML/realisations.xml");
//--- Variable qui va permettre de scroller d'un projet à l'autre ---
var index:Number=0;
var categorie2:String ;
try {
   // on récupère la variable maVar du swf appelant
   (categorie2=this.parent.parent["categorie"]);
}
// on récupère l’erreur si la variable n’est pas passée
catch (e:Error) {
   // on affiche l’erreur, s’il y a lieu
   trace ("Erreur : "+e);
}

//
//--- Importation de la class Tween ---
//
import fl.transitions.*;
import fl.transitions.easing.*;
//
//-------------------------------------------------------------------- FONCTIONS ---//
//
//
//--- Fonction qui affecte les données chargées à une variable ---
//
function chargementFini(event:Event) {
   infosChargement.visible = false;
   realisationsXML=new XML(chargeDonnees.data);
   chargeProjet(categorie);
}
//
//--- Fonction qui charge les projets d'une section ---
//
function chargeProjet(categorieP:String) {
   //--- On détermine le nombre de projets
   var nbProjets:Number=realisationsXML[categorieP].children().length();
   //
   //
   //
   for (var i=0; i<nbProjets; i++) {
      //
      //--- On place le bouton ---
      //
      var boutonP:bProjet=new bProjet  ;
      boutonP.x=10;
      boutonP.y=45*i;
      boutonP.name="bProjet"+i;
      addChild(boutonP);
      boutonP.indexProjet=index;
      boutonP.texteBouton.text = i+1;
      //
      //--- On définit l'action du bouton ---
      //
      boutonP.addEventListener(MouseEvent.CLICK, afficheProjet);
      //
      //--- On charge les infos du projet ---
      //
      var projetC:clipProjet=new clipProjet  ;
      projetC.y=boutonP.indexProjet;
      projetC.name="clipProjet"+i;
      sections.addChild(projetC);
      //--- Nom du projet ---
      projetC.nomProjet.text = realisationsXML[categorieP].projet[i].@nomProjet;
      //--- Type de projet ---
      projetC.typeProjet.text = realisationsXML[categorieP].projet[i].@typeProjet;
      //--- Descriptif du projet ---
      projetC.descriptionProjet.text = realisationsXML[categorieP].projet[i];
      //
      //--- L'image du projet ---
      //
      chargeImage(realisationsXML[categorieP].projet[i].@image, projetC.imageProjet);
      //
      //--- On incrémente l'index : pour les futurs positions des autres projets ---
      //
      index+=470;
   }
}
//
//--- Fonction qui charge les images ---
//
function chargeImage(url:String, cible:Object) {
   var loaderImage:Loader = new Loader();
   var urlImage:URLRequest = new URLRequest(url);
   loaderImage.load(urlImage);
   cible.addChild(loaderImage);
}
//
//--- Fonction qui scroll d'un projet à l'autre ---
//
//
//----------------------------------------------------------
function afficheProjet(event:MouseEvent) {
   var deplaceSections:Tween = new Tween(sections, "y", Strong.easeOut, sections.y, -event.currentTarget.indexProjet, 1, true);
}
//---------- ECOUTEURS ---//
chargeDonnees.load(adresseFichier);
chargeDonnees.addEventListener(Event.COMPLETE, chargementFini);


a propos, le code que tu donnes dans le cour (sur l'interface) comporte il me semble une erreur de copier/coller, et comme je l'ai bêtement copier/coller avant de lire l'explication, il m'a déja fallu comprendre l'erreur : caseLabel non attendu...

Mais pour l'heure, j'ai :
1120: Accès à la propriété non définie event. switch (event.currentTarget) {
pour ce qui est de interface
et:
1120: Accès à la propriété non définie categorie. chargeProjet(categorie);
quand j'essaye realisations...
:?: :?:
Avatar de l’utilisateur
Muktaditi
Habitué
 
Messages: 56
Inscrit le: Jeu 29 Oct 2009 08:50
Reputation points: 1
Add reputation pointSubtract reputation point
Nombre de post utiles: 1

Re: Site complet en flash : part 6

Messagepar explainMe sur Mer 11 Nov 2009 11:02

Oui tu as raison, je ne sais pas ce que j'ai fait lorsque j'ai copier mon code dans l'article, mais j'ai créé des lignes en doubles dans la fonction afficheSousMenu(); :

la première ligne :
switch (event.currentTarget) {

était en double, et une accolade se baladait au beau milieu du switch case. Donc il ne risquait pas de marcher...

Désolé :oops: .

C'est rectifié.

En revanche il y a un souci dans ton code il me semble car tu as placé le switch case tout seul au milieu du code, alors qu'il doit être mis dans une fonction.

D'où le fait qu'il ne trouve pas le event puisqu'il est normalement fourni en argument à la fonction abritant le switch.

Muktaditi a écrit:1120: Accès à la propriété non définie categorie. chargeProjet(categorie);
quand j'essaye realisations...


Attention : une fois les modifications du chapitre 6 apportés au fichier portfolio (ou realisations dans ton cas), ce dernier ne peut plus fonctionner de manière autonome, car il a besoin de la variable déclarée dans le fichier parent (interface).

Donc il ne faut plus accéder à realisations seul, mais par le biais d'interface qui le charge en lui-même.
"If you can't explain it simply, You don't understand it well enough."

www.explain-me.com | forum.explain-me.com | infoTRASH
Avatar de l’utilisateur
explainMe
Administrateur
 
Messages: 267
Inscrit le: Ven 03 Oct 2008 19:09
Localisation: Toulouse
Reputation points: 4
Add reputation pointSubtract reputation point
Nombre de post utiles: 1

Re: Site complet en flash : part 6

Messagepar Muktaditi sur Jeu 12 Nov 2009 07:38

Aucune raison d'être désolé, c'est moi qui le suit, et j'espère ne pas trop te gaver avec mon ignorance...

ok le switch case se trouve dans la fonction qui conditionne l'affichage du sousMenu..
je n'ais pas cette fonction... je n'ais qu'un seul sousmenu...

j'ai donc essayé de placer le switch case dans ma fonction deplaceSousMenu, et je n'ais plus de message d'erreur..
par contre, quand je clic sur mon bouton réalisations, mon sousmenu n'a pas le temps de se déplacer et l'infobulle du swf realiisations apparait ....

question: est-ce que je peux créer un autre écouteur de "click" sur les boutons du menu sans sous menu, en plus de ceux exisatant déja ??? parceque dans mon cas, ce serrait peutêtre plus simple de ne créer que des écouteurs ...non???
Avatar de l’utilisateur
Muktaditi
Habitué
 
Messages: 56
Inscrit le: Jeu 29 Oct 2009 08:50
Reputation points: 1
Add reputation pointSubtract reputation point
Nombre de post utiles: 1

Re: Site complet en flash : part 6

Messagepar explainMe sur Jeu 12 Nov 2009 18:50

Ostad Elahi a écrit:Celui qui dit "moi, je sais !" est plus ignorant que l'ignorant ; il faut toujours savoir apprendre des autres.


S'il te plaît : ne t'excuse plus de ne pas savoir. Les seules personnes qui doivent s'excuser sont celles qui n'essaient même pas de comprendre... (je ne vise personne, c'est juste une réflexion :) ).

Alors 2 choses :

1 - un écouteur seul ne sert à rien. Un écouteur en Actioncript sert à intercepter une action (par exmple le clic de la souris ou le survol, etc...).

Donc un écouteur doit fonctionner en tandem avec une fonction :

EN PREMIER l'écouteur intercepte l'action, PUIS il demande à une fonction de s'exécuter afin d'obtenir une action en RÉPONSE à la première action interceptée.


2 - Bien entendu que tu peux déclarer plusieurs écouteurs sur la même action pour une seule et même occurrence, en théorie ça ne pose pas de problème du moins (je n'ai pas testé je t'avoue).

Ex :
Code: Tout sélectionner
//--- écouteur 1 ---
monClip.addEventListener(MouseEvent.MOUSE_OVER, fonctionReponse1);
//--- écouteur 2 ---
monClip.addEventListener(MouseEvent.MOUSE_OVER, fonctionReponse2);


En revanche, tu peux obtenir le même résultat d'une autre manière :

Tu n'utilise qu'un seul écouteur, cependant il appelle une fonction de retour qui à son tour appel 1, 2, plusieurs fonctions à la fois. Ça t'évite d'avoir plusieurs écouteurs sur un même évènement pour une même occurrence et tu peux rajouter facilement d'autres appels dans ta fonction "intercalaire".

En gros ça donnerais quelque chose dans ce style :
Code: Tout sélectionner
//--- Fonction 1 ---
function fonction1() {
          //--- Actions ---
}
//--- Fonction 2 ---
function fonction2() {
          //--- Actions ---
}
//--- Fonction intercalaire ---
function fonctionIntercalaire() {
          //--- Appel de plusieurs fonctions ---
          function1();
          function2();
          ...
}
//--- écouteur ---
monClip.addEventListener(MouseEvent.MOUSE_OVER, fonctionIntercalaire);


Vois-tu la subtilité ?
"If you can't explain it simply, You don't understand it well enough."

www.explain-me.com | forum.explain-me.com | infoTRASH
Avatar de l’utilisateur
explainMe
Administrateur
 
Messages: 267
Inscrit le: Ven 03 Oct 2008 19:09
Localisation: Toulouse
Reputation points: 4
Add reputation pointSubtract reputation point
Nombre de post utiles: 1

Re: Site complet en flash : part 6

Messagepar Muktaditi sur Ven 13 Nov 2009 07:45

lol... à force de dire que je n'y connait rien...

si il y a un truc que j'ai compris c'est les écouteurs...et oui évidemment ils marchent avec des fonctions... ;)
en revanche l'idée d'une fonction intercalaire peut-être interessante...


j'essaye et je te dirai...

Mais pour l'heure, donc en mettant :
Code: Tout sélectionner
//
//--- Fonction deplaceSousMenu ---
//
function deplaceSousMenu(event:MouseEvent) {
   var translationSousMenu:Tween = new Tween(menu1.sousMenu, "y", Strong.easeOut, menu1.sousMenu.y, -65, 1, true);

   switch (event.currentTarget) {

      case menu1.bPresentation :
         chargeSousPartie("presentation.swf","");
         break;

      case menu1.bRealisations :
         chargeSousPartie("realisations.swf", "design");
         break;

      case menu1.bLiens :
         chargeSousPartie("liens.swf", "");
         break;

      case menu1.bContact :
         chargeSousPartie("contact.swf", "");
         break;
   }
}


quand je clic sur réalisation, mon sousmenu apparait, et le swf se charge (bizarement, hier, alors que je n'ais rien touché le sous menu n'avait même pas le temps de s'ouvrir)...cependant, il reste coincé sur l'infobulle de chargement et plus aucune action n'est possible sur les boutons...

haa !!! rectificatif, rééssais, il refait comme hier...en bref pour l'heure ça ne fonctionne pas, et me semble un peu complexe par rapport a la simplicité de mon site...

je vais essayer d'écrire et je te redemande...


edit:

afin peut-être que tu puisses évaluer ou j'en suis, j'ai écrit ceci : ce n'est ni du code, ni du français ni des maths, mais un assemblage de ce que j'ai compris....j'espère que tu pourras me suivre et m'aider à remplir les trous....
Code: Tout sélectionner
//--les Evenements--//addEventListener

bMenuSelectionne.addEventListener(MouseEvent.CLICK, chargeswfCorrespondant);
bMenuSelectionne.addEventListener(MouseEvent.CLICK, cacheSousMenu);
menuTexte.sousMenu.realisations.addEventListener(MouseEvent.CLICK, montreSousMenu);
bSelectionne.addEventListener(MouseEvent.MOUSE_OVER, appliqueFiltre);
   
//Les variables--//
   var posInitSousMenu = menuTexte.sousMenu.y
   celles  que je ne sais pas écrire:
   bMenuSelectionne = {bPresentation,bLiens,bContact}
   bSousMenuSelectionne ={bDessins,bPhotoshop,bIllustrator,bAutres}
   bSelectionne = {bPresentation,bRealisattions,bLiens,bContact,bDessins,bPhotoshop,bIllustrator,bPhotos,bAutres}
            ou(b_"") en fait tous les boutons...
   swfMenuCorrespondant = {presentation.swf,liens.swf,contact.swf}
   categorie= {dessins,photoshop... les catégories du sousMenu}
   et celles concernant les url...
//--Les fonctions--//

function montreSousMenu (Event:MouseEvent) {
   var translationSousMenu:Tween = new Tween(menuTexte.sousMenu, "y", Strong.easeOut, menuTexte.sousMenu.y, menuTexte.y-50, 1,true);
}
function cacheSousMenu (Event:MouseEvent) {
   var translationSousMenu:Tween =new Tween(menuTexte.sousMenu, "y", Strong.easeOut, menuTexte.sousMenu.y, posInitSousMenu, 1, true);
}

celles que je ne sais pas écrire:
function chargeSwfCorrespondant
         selon bMenuSelectionne, url sur le swf correspondant s'affiche dans le clip contenu
}
function chargeswfRealisation
         selon bSousMenuSelectionne, url sur realisations.swf.categorie(correpondante)
}
function appliqueFiltre
         bSelectionne=bSelectionne+filtre
}
   
}


il manque évidemment les préchargements, mais j'y reviendrai...
voila... j'en suis là de ma compréhension, j'espère que ça te permettra de m'aider...
Avatar de l’utilisateur
Muktaditi
Habitué
 
Messages: 56
Inscrit le: Jeu 29 Oct 2009 08:50
Reputation points: 1
Add reputation pointSubtract reputation point
Nombre de post utiles: 1

Re: Site complet en flash : part 6

Messagepar explainMe sur Ven 13 Nov 2009 21:19

Je ne sais pas si tu as déjà programmé dans un autre langage, mais ton petit "texte" n'est pas mal du tout, on se rapproche un peu de la logique de l'algorithmique tel que je l'entends, à savoir :
D'abord écrire le code avec des phrases, puis le transcrire avec le langage utilisé.

Début petite parenthèse ------------------------------------------------------
Les boutons ne sont pas des variables, au mieux les textes des boutons peuvent êtres contenus dans des variables, mais un bouton est une occurrence d'un objet "physique" (= présent sur la scène ou dans la bibliothèque) ou "de code" (= construction du bouton directement via l'ActionScript).
Fin petite parenthèse ---------------------------------------------------------

Comme je ne suis pas partisan de donner la solution toute faite (rassure toi je sais bien que ce n''est pas ce que tu me demande), je vais repartir de ta logique avec un exemple simple pour reposer les choses d'une autre façon.
Ce que je te propose c'est de t'en inspirer pour dans un premier temps écrire le code avec des phrases, puis une fois que la logique sera bonne, on passera à la transcription en ActionScript (tu fera ce que tu sais faire et que tu as compris, puis je t'aiderais pour le reste).

Voici donc un petit exemple assez simple (j'ai rajouter des couleurs pour rendre la chose plus digeste) :

L'hypothèse est la suivante (le principe est loufoque je te l'accords, mais c'est pour faire simple afin de bien tout poser à plat) :

J'ai 4 boutons :
    1 qui permet d'afficher le menu
    1 qui permet de masquer le menu
    2 qui permettent de charger chacun un swf différent (dans le même clip cible)

J'ai 2 variables qui définissent les 2 positions du menu.

J'ai 4 fonctions :
    1 pour afficher le menu
    1 pour masquer le menu
    1 qui évalue le swf à charger en fonction du bouton cliqué
    et enfin 1 qui se charge de charger le dit swf

Enfin j'ai 4 écouteurs (1 par bouton et par action écoutée, ça me semble plus propre que d'avoir plusieurs écouteurs sur une même occurrence pour la même action).
De plus j'ai créé une fonction que se charge d'identifier le bouton sur lequel j'ai cliqué donc tout va bien.

Version "algorithmique" :

//--- IMPORTATION ---
importation des classes externes nécessaire (ex : class Tween)
//--- VARIABLES ---
variable : positionInitialeDuMenu = valeur [type : nombre];
variable : positionFinaleDuMenu = valeur [type : nombre];
//--- FONCTIONS ---
fonction : montreSousMenu( argument : évènement de la souris [type : évènement] ) {
action : animation du menu de sa position initiale vers sa position finale
}
fonction : cacheSousMenu ( argument : évènement de la souris [type : évènement]) {
action : animation du menu de sa position finale vers sa position initiale
}
fonction : choixSection(arguments : évènement de la souris [type : évènement]) {
condition : en fonction du bouton qui a été cliqué
action : on lance l'exécution de la fonction : chargeSwf en lui indiquant le bon fichier à charger
}
fonction : chargeSwf(arguments : swf à charger [type : chaîne de caractères]) {
action : vide le clip cible
action : charge le swf dans le clip cible
}
//--- ECOUTEURS ---
ecouteur : sur le bouton bAfficheMenu (action : CLIC) qui déclenchera l'exécution de la fonction : montreSousMenu
ecouteur : sur le bouton bMasqueMenu (action : CLIC) qui déclenchera l'exécution de la fonction : cacheSousMenu
ecouteur : sur le bouton bSection1 (action : CLIC) qui déclenchera l'exécution de la fonction : choixSection
ecouteur : sur le bouton bSection2 (action : CLIC) qui déclenchera l'exécution de la fonction : choixSection

Version ActionScript :
Code: Tout sélectionner
function cacheSousMenu( event:MOUSE_EVENT ) {
   var animSousMenu:Tween = new Tween(sousMenu, "y", Strong.easeOut, posFinale, postInitMenu, 1,true);
}
function choixSection( event:MOUSE_EVENT ) {
   switch( event.currentTarget ) {
      case boutonSection1 :
         chargeSwf("section1.swf");
         break;
         
      case boutonSection2 :
         chargeSwf("section2.swf");
         break;
   }
}
function chargeSwf( String:URL ) {
   //--- On vide le conteneur ---
   while (cible.numChildren > 0) {
      cible.removeChildAt(0);
   }
   //--- création du chargeur ---
   var chargeur:Loader = new Loader();
   //--- url à atteindre ---
   var chemin:URLRequest=new URLRequest( URL );
   //--- chargement du contenu ---
   chargeur.load(chemin);
   //--- ajout à la liste d'affichage : lancement du chargement ---
   cible.addChild(chargeur);
}
//
//--- ECOUTEURS ---
//
this.bAfficheMenu.addEventListener(MouseEvent.CLICK, montreSousMenu);
this.bMasqueMenu.addEventListener(MouseEvent.CLICK, cacheSousMenu);
this.bSection1.addEventListener(MouseEvent.CLICK, choixSection);
this.bSection2.addEventListener(MouseEvent.CLICK, choixSection);


Attention : j'ai écris ce code de manière "brut" afin qu'il soit le miroir de sa version algorithmique, bien qu'il soit correct (enfin j'espère :? ), il n'est pas réaliste dans le sens où les valeurs des variables ne représente rien de concret. À considérer comme exemple théorique donc.

Le code peut encore être améliorer, pour l'exemple j'ai fait simple.
Par exemple j'ai fait 2 fonctions : une qui affiche et une qui masque le menu. Le fait est que ces 2 fonctions effectuent la même action, mais dans un sens ou dans l'autre, il est donc tout à fait possible de ne faire qu'une seule fonction qui, suivant les critères, réalise l'action dans un sens ou dans l'autre. Tout est toujours "perfectible".

Voilà essaye maintenant de conceptualiser tes actions sous la forme d'un code "algorithmique". Ça nous permettra déjà de rectifier la logique si besoin, pour ensuite passer à la version code qui ne devrait ensuite plus qu'être une question de transcription d'un langage à l'autre (avec quelques explications évidement si besoin).
"If you can't explain it simply, You don't understand it well enough."

www.explain-me.com | forum.explain-me.com | infoTRASH
Avatar de l’utilisateur
explainMe
Administrateur
 
Messages: 267
Inscrit le: Ven 03 Oct 2008 19:09
Localisation: Toulouse
Reputation points: 4
Add reputation pointSubtract reputation point
Nombre de post utiles: 1

Re: Site complet en flash : part 6

Messagepar Muktaditi sur Sam 14 Nov 2009 17:33

Bonjour

Pour répondre à ta question, je n'ais fait qu'un peu de basique a l'époque du dos, sur un amstrad a cassette....
j'avais réussi a faire un sapin qui clignote... c'est loin.... :roll:

bon alors... je reprend donc mon projet j'ai:
1 menu de 4 boutons : 3 chargent le swfCorrespondant et repositionne le sousMenu à sa place
1 fait apparaitre le sousMenu
1 sousMenu de 5 boutons : chacun chargeant la catégorieCorrespondante du swfRealisations

version Algorythmique :

//--- IMPORTATION ---
importation des classes externes nécessaire (ex : class Tween)
//--- VARIABLES ---
variable : positionInitialeDuSousMenu = valeur [type : nombre];
variable : positionFinaleDuSousMenu = valeur [type : nombre];
variable : etatInitialDesBoutons = apparence [type: chaîne de caractères]
variable : etatEnRollOverDesBoutons = apparence[type:chaîne de caractères]
//--- FONCTIONS ---
fonction : montreSousMenu( argument : évènement de la souris [type : évènement] ) {
action : animation du menu de sa position initiale vers sa position finale
}
fonction : cacheSousMenu ( argument : évènement de la souris [type : évènement]) {
action : animation du menu de sa position finale vers sa position initiale
}
fonction : appliqueFiltre (argument: évènement de la souris [type : évènement]) {
action: applique un filtre
}
fonction : choixSwfCorrespondant(arguments : évènement de la souris [type : évènement]) {
condition : en fonction du bouton du menu qui a été cliqué
action : on lance l'exécution de la fonction : chargeSwfcorrespondant
}
fonction : chargeSwfCorrespondant(arguments : swf à charger [type : chaîne de caractères]) {
action : vide le clip cible
action : charge le swf dans le clip cible
}
fonction : choixCatégorieRealisation (arguments : évènements de la souris [type : évènements]){
condition : en fonction du bouton du sousMenu qui a été cliqué
action : exécution de la fonction chargeCategorieCorrespondante
}
fonction chargeCategorieCorrespondante (arguments: catégorie à charger [type:chaîne de caractères]) {
action : vide le clip cible
action : charge la categorie dans le swfRealisation
}
fonction chargeSwfRealisations (arguments:évènement de le souris [type : évènements]) {
action : vide le clip cible
action : charge swfRealisation dans le clip cible


//--- ECOUTEURS ---
ecouteur : sur le bouton bPresentation (action : CLIC) qui déclenchera l'exécution de la fonction : cacheSousMenu
ecouteur : sur le bouton bPresentation (action : CLIC qui déclenchera l'éxecution de la fonction : choixSwfCorrespondant
(ou 1 seul écouteur qui déclanche les 2 fonctions ???)
ecouteur : sur le bouton bPresentation (action : MOUSE_OVER) qui déclenchera l'exécution de la fonction : appliqueFiltre

ecouteur : sur le bouton bRealisation (action : CLIC) qui déclenchera l'exécution de la fonction : montreSousMenu
ecouteur : sur le bouton bRealisation (action : MOUSE_OVER) qui déclenchera l'exécution de la fonction : appliqueFiltre

ecouteur : sur le bouton bLiens (action : CLIC) qui déclenchera l'exécution de la fonction : cacheSousMenu
ecouteur : sur le bouton bLiens (action : CLIC qui déclenchera l'éxecution de la fonction : choixSwfCorrespondant
(ou 1 seul écouteur qui déclanche les 2 fonctions ???)
ecouteur : sur le bouton bLiens (action : MOUSE_OVER) qui déclenchera l'exécution de la fonction : appliqueFiltre

ecouteur : sur le bouton bContact (action : CLIC) qui déclenchera l'exécution de la fonction : cacheSousMenu
ecouteur : sur le bouton bContact (action : CLIC) qui déclenchera l'exécution de la fonction : choixSwfCorrespondant
(ou 1 seul écouteur qui déclanche les 2 fonctions ???)
ecouteur : sur le bouton bContact (action : MOUSE_OVER) qui déclenchera l'exécution de la fonction : appliqueFiltre

ecouteur : sur le bouton bDessin (action : CLIC) qui déclenchera l'éxécution de la fonction : chargeswfRealisation
ecouteur : sur le bouton bDessin (action : MOUSE_OVER) qui déclenchera l'exécution de la fonction : appliqueFiltre
ecouteur : sur le bouton bPhotoshop (action : CLIC) qui déclenchera l'éxécution de la fonction : chargeswfRealisation
ecouteur : sur le bouton bPhotoshop (action : MOUSE_OVER) qui déclenchera l'exécution de la fonction : appliqueFiltre
ecouteur : sur le bouton bIllustrator (action : CLIC) qui déclenchera l'éxécution de la fonction : chargeswfRealisation
ecouteur : sur le bouton bIllustrator (action : MOUSE_OVER) qui déclenchera l'exécution de la fonction : appliqueFiltre
ecouteur : sur le bouton bPhotos (action : CLIC) qui déclenchera l'éxécution de la fonction : chargeswfRealisation
ecouteur : sur le bouton bPhotos (action : MOUSE_OVER) qui déclenchera l'exécution de la fonction : appliqueFiltre
ecouteur : sur le bouton bAutres(action : CLIC) qui déclenchera l'éxécution de la fonction : chargeswfRealisation
ecouteur : sur le bouton bAutres(action : MOUSE_OVER) qui déclenchera l'exécution de la fonction : appliqueFiltre

voila pour cette partie, je commence a rédiger en code, et je post dès que c'est fait...
Avatar de l’utilisateur
Muktaditi
Habitué
 
Messages: 56
Inscrit le: Jeu 29 Oct 2009 08:50
Reputation points: 1
Add reputation pointSubtract reputation point
Nombre de post utiles: 1

Re: Site complet en flash : part 6

Messagepar explainMe sur Sam 14 Nov 2009 18:03

Ep ep, pas si vite...

Justement le but de passer par un pseudo code fait de phrases est justement de ne pas se jeter trop vite dans le code.

Voilà ce que je te propose suite la lecture de ton algo (qui soit dit en passant n'est pas mal du tout) :

[1] - Je ne comprends pas les variables suivantes :

variable : etatInitialDesBoutons = apparence [type: chaîne de caractères]
variable : etatEnRollOverDesBoutons = apparence[type:chaîne de caractères]

À quoi servent elles en fait ? à changer le texte des boutons ?

[2] - Effectuer un test au niveau de ton sous-menu :

Avant de l'afficher/masquer pense à déterminer quel est son état actuel (inutile de l'afficher s'il l'est déjà ;) ).
Dans le code présent dans le cours, j'utilise une fonction intercalaire et une variable (à toi de voir comment tu souhaites procéder).

[3] - Je trouve qu'il y a trop de fonctions qui réalisent la même action :

je te conseil de fusionner les fonctions suivantes choixSwfCorrespondant avec choixCatégorieRealisation et chargeSwfCorrespondant avec chargeCategorieCorrespondante et chargeSwfRealisations.

Pourquoi ?


Parce qu'il ne sert à rien d'avoir plusieurs fonctions qui effectuent la même action. Il te suffit de remanier tes fonctions pour au final avoir 1 fonction chargée d'analyser le clic et ses conséquences, et une seconde fonction chargée, suivants les paramètres qui lui sont transmis (les arguments) de charger le bon fichier dans le bon clip cible.

[4] - les écouteurs :

Je fait un test et tu peux placer 2 écouteurs sur une même occurrence pour une même action, ça ne pose pas de problème. À toit donc de voir si tu préfère procéder comme ça ou si tu souhaites utiliser une fonction intercalaire.
"If you can't explain it simply, You don't understand it well enough."

www.explain-me.com | forum.explain-me.com | infoTRASH
Avatar de l’utilisateur
explainMe
Administrateur
 
Messages: 267
Inscrit le: Ven 03 Oct 2008 19:09
Localisation: Toulouse
Reputation points: 4
Add reputation pointSubtract reputation point
Nombre de post utiles: 1

Re: Site complet en flash : part 6

Messagepar Muktaditi sur Dim 15 Nov 2009 11:26

lol..

1 _pour ce qui est des variables :
variable : etatInitialDesBoutons = apparence [type: chaîne de caractères]
variable : etatEnRollOverDesBoutons = apparence[type:chaîne de caractères]
Elles font référence a la fonction appliqueFiltre... mais en fait je me rends compte qu'une seule suffit, je me suis embrouillée en suivant plus ou moins la même logique que le déplacement du sousMenu... je m'explique :
pour le sousMenu et ses déplacements j'ai déclaré 2 variables (comme sur ton exemple),
--Appartté
( alors que une seule suffit en fait...
variable posInitSousMenu = position en y du sousMenu tel que je l'ai positionné sur la scène
fonction montreSousMenu = tween qui déplace le sousMenu sur l'axe des Y
fonction cacheSousMenu =tween qui remet le sousMenu a PosInitSousMenu...comme dans le tuto...)

--Fin Apparté
alors du coup j'ai déclaré 2variables pour l'état des boutons...mais 1 seule suffit, je n'ais qu'une seule fonction, appliqueFiltre que l'on retrouve dans l'écouteur des boutons en MOUSE_OVER...(l'état en MOUSE_OUT étant je pense automatique non ?)
Mes boutons sont ici des occurences du clip B_INVISIBLE, qui sont des zones en fait...et je m'apperçois que ce n'est pas bon du tout... c'est sur le texte des boutons en fait que je voudrais appliquer le filtre... du coup, je crois bien qu'il me faut construire mes boutons avec pour chacun un texte dynamique :|
et ma variable etatEnRollOverDesBoutons ferrai référence a ces textes...

2_Effectuer un test au niveau de mon sous-menu :

Mon sousMenu se trouve initialement SOUS le menu, caché par celui-ci...Il n'apparait que si l'on clique sur le bouton réalisation, et si l'on clique sur les autres boutons du menu, il reprend (ou donc reste) à sa position initiale..

j'ai 3 boutons dont les fonctions sont similaires (charger le swfCorrespondant, sans catégories xml, et cacher le sousMenu), et ce bouton réalisation dont l'action est de faire apparaitre 5 boutons, dont la fonctionn est de charger le swfRéalisation dans la catégorieCorrespondante...

je pensais utiliser un switch sur les 3 boutons comme dans ton exemple, pour le chargement du SwfCorrespondant
et un autre sur les boutons du sousMenu pour le chargement du swfRealisation dans la catégorie...d'ou une fonction choixCategorie en fonction du bouton du sousMenu cliqué, se trouvant à l'interrieur de la fonction chargeSwfRéalisation.. (ce que je n'ais pas dit dans ma version algo...)

fonction : choixCatégorieRealisation (arguments : évènements de la souris [type : évènements]){
condition : en fonction du bouton du sousMenu qui a été cliqué
action : exécution de la fonction chargeSwfRealisation
}
fonction chargeSwfRealisations (arguments:évènement de le souris [type : évènements]) {
action :éxécution de la fonction chargeCategorieCorrespondante (arguments: catégorie à charger [type:chaîne de caractères]){
condition: en fonction du bouton du sousMenu cliqué
action : charge la catégorie (xml) dans le swfRéalisation
}
action:vide le clip cible
action: charge le swfRealisation...
}

ça me semblait logique en fait de "séparer" ce bouton réalisation des autres et du coup de créer les fonctions spécifiques...
Mais peutêtre une autre logique est préférable...
Avatar de l’utilisateur
Muktaditi
Habitué
 
Messages: 56
Inscrit le: Jeu 29 Oct 2009 08:50
Reputation points: 1
Add reputation pointSubtract reputation point
Nombre de post utiles: 1

Suivant

Retourner vers Suite des cours

Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 0 invités

cron