Forums Développement Multimédia

Aller au contenu

Empecher le re-chargement d'un clip

CODE Actionscript

5 réponses à ce sujet

#1 nicolectro

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 121 messages

Posté 12 November 2008 - 10:47 AM

Bonjour, je suis en train de remonter mon portofolio que j'essaie de gérer totalement en XML. J'ai monté mon arborescence de menu et sous menu grâce à un fichier XML. Ça, ça fonctionne ! A partir d'un clic sur un sous menu, je fais un attachMovie d'un clip dans la bibliothèque qui charge à son tour un autre XML afin de générer un diaporama de manière dynamique. Mon problème est tout bête : je voudrais qu'une fois que le bouton "menu1>sousmenu1" ait été cliqué, il ne soit plus possible de recliquer dessus et donc de recharger le clip correspondant. Or, je ne sais pas cibler mon bouton, donc je ne sais pas le rendre "enabled = false". J'ai donc essayé avec un système de variable globale appliqué à chaque clip chargé (si clip carré est chargé alors booléenne est true et ne peut donc plus être chargé). J'ai donc (pour exemple) :

Action Script

menu[i].sousMenu[j].onRelease  = function(){
if (carreBooleenne == false){
loadMovie (…)
}
}

Ça fonctionne très bien si je n'ai qu'une variable à vérifier. Mais si j'en ai 2 du style :

Action Script

menu[i].sousMenu[j].onRelease  = function(){
if (carreBooleenne == false || rondBooleenne == false){
loadMovie (…)
}
}

Là ça ne fonctionne plus puisque si une des conditions n'est pas vérifié, il recharge systématiquement le clip déjà chargé. Si je remplace || par &&, évidemment, il bloque tout une fois le premier clip chargé.
Je ne sais pas si je suis clair. Si vous avez compris ce que je voulais vous expliquer, auriez-vous une alternative à me proposer ?
Merci d'avance.



#2 nicolectro

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 121 messages

Posté 12 November 2008 - 13:13 PM

je vous joins un fla ainsi que le XML qui va avec. Je pense que ça sera plus clair comme ça.
Donc, selon que l'on clique sur le sousMenu1 ou le sousMenu2… on charge un clip différent sur la scène. Une fois ce clip chargé, je voudrais rendre le bouton sousMenu en question inactif. Je pense que mon idée des variables évoquée ci-dessus n'est pas des meilleures. Il faut donc que j'arrive à cibler mon bouton pour le rendre inactif temporairement (à partir du fichier chargé certainement) mais je ne sais comment faire.
Merci

Fichier(s) joint(s)

  • Fichier joint  Archive.zip   10.24 Ko   15 téléchargement(s)


#3 nicolectro

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 121 messages

Posté 13 November 2008 - 14:53 PM

Bonjour à tous, je me permets de vous reposer la question ! icon_wink.gif
A+

#4 nicolectro

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 121 messages

Posté 15 November 2008 - 13:29 PM

Salut, j'auto-relance le sujet puisque les choses ont légèrement évolué. J'ai réfléchi (une fois n'est pas coutume) et j'ai fini par comprendre que la seule solution viable était de désactiver mes boutons une fois que j'ai cliqué dessus et de les rendre de nouveau actif dès que je cliquais sur un autre. Donc, ça me donne une fonction que je déclare en dehors de ma boucle et qui vérifie l'état d'un bouton à l'instant où je clique sur un autre. En voici un exemple concret :

Action Script

for (i = 0; i < 3; i++) {
var leClip:MovieClip = this.attachMovie("clip", "clip-" + i, i);
leClip._x = 50 + i * (leClip._width + 10);
leClip._y = 50;
leClip.id = i;
leClip.onRelease = function() {
verifier();
this._alpha = 0;
this.enabled = false;
};
}
function verifier() {
for (t = 0; t < 3; t++) {
if (this["clip-" + t].enabled == false) {
this["clip-" + t].enabled = true;
this["clip-" + t]._alpha = 100;
}
}
}

Donc, j'ai réussi à faire ce que je cherche à faire depuis mon premier message de ce post. Malheureusement, lorsque je cherche à l'appliquer au cas concret présenté ici, je n'arrive pas à cibler mon bouton et ma fonction n'a donc aucune utilité. Voici le code (simplifié) :

Action Script

fichierXml = new XML();
fichierXml.ignoreWhite = true;
fichierXml.onLoad = function() {
total = fichierXml.firstChild.childNodes.length;
creerMenus();
};
fichierXml.load("FichiersXML/menus.xml");
zoneDeBase = this.createEmptyMovieClip("zoneDeBase", this.getNextHighestDepth());
ecart = 15;
function creerMenus() {
for (var i = 0; i < total; i++) {
zoneMenu = zoneDeBase.createEmptyMovieClip("leMenu_" + i, zoneDeBase.getNextHighestDepth());
menu = zoneMenu.attachMovie("menu", "menu", zoneMenu.getNextHighestDepth());
menu.titre.text = fichierXml.firstChild.childNodes[i].attributes.partie;
zoneMenu._x = 0;
zoneMenu._y = i * (zoneMenu._height + ecart);
zoneSousMenu = zoneMenu.createEmptyMovieClip("zoneSousMenu", zoneMenu.getNextHighestDepth());
zoneSousMenu._x = menu._x;
zoneSousMenu._y = menu._height;
sousTotal = fichierXml.firstChild.childNodes[i].childNodes.length;
for (var j = 0; j < sousTotal; j++) {
sousMenu = zoneSousMenu.attachMovie("rubrik", "sousMenu_" + j, zoneSousMenu.getNextHighestDepth());
sousMenu.titre.text = fichierXml.firstChild.childNodes[i].childNodes[j].attributes.titre;
sousMenu.fichier = fichierXml.firstChild.childNodes[i].childNodes[j].attributes.fichier;
sousMenu._x = menu._width - sousMenu._width;
sousMenu._y = j * sousMenu._height;
sousMenu.id = j;
sousMenu.onRelease = function() {
verifier();
this.enabled = false;
};
}
}
}

function verifier() {
for (t = 0; t < 3; t++) {
if (this["sousMenu_" + t].enabled == false) {
//ici mon trace ne me donne rien, pas même undefined (????)
trace(this["sousMenu_" + t]);
this["sousMenu_" + t].enabled = true;
}
}
}

Sauriez-vous où se situe mon erreur ? Voyez-vous comment cibler mon clip "sousMenu_". Je m'en remets à vous parce que là, vraiment, je pète les plombs…
Merci d'avance
A+

#5 Jano 95

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 4558 messages

Posté 15 November 2008 - 14:53 PM

Salut.

Pour résoudre simplement ton problème, je vois 2 solutions.

1 - Tu actives, via une seconde boucle, tous les boutons, et tu désactives le bouton concerné.

Action Script

for (i = 0; i < 3; i++) {
var leClip:MovieClip = this.attachMovie("clip", "clip-" + i, i);
leClip._x = 50 + i * (leClip._width + 10);
leClip._y = 50;
leClip.id = i;
leClip.onRelease = function() {
for (j = 0; j < 3; j++) {
this._parent["clip-"+j].enabled = true;
this._parent["clip-"+j]._alpha = 100;
};
this._alpha = 0;
this.enabled = false;
};
}
2 - Tu mets le nom du bouton actif dans une variable, il suffit ensuite de jouer sur cette variable.

Action Script

for (i = 0; i < 3; i++) {
var leClip:MovieClip = this.attachMovie("clip", "clip-" + i, i);
leClip._x = 50 + i * (leClip._width + 10);
leClip._y = 50;
leClip.id = i;
leClip.onRelease = function() {
clip_old.enabled = true;
clip_old._alpha = 100;
this._alpha = 0;
this.enabled = false;
clip_old = this;
};
};
Les 2 méthodes donnent le même résultat.

Fichier(s) joint(s)



#6 nicolectro

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 121 messages

Posté 15 November 2008 - 15:32 PM

gourou.gif gourou.gif
Merci Jano… You're the one !
Plus d'une semaine de recherche et toi : 5min icon_cry.gif
Un grand merci et bon week-end !!!



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

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