0

Salut à nouveau :) Clignotants autresComment donner des actions boutons créées dynamiquement pour chacun - partie 2

Ma première question en passe ici à Stackoverflow abordé cette question, j'avais un tableau qui a créé quelques boutons différents. Cependant, je ne savais pas comment leur attribuer des actions: How to give dynamically created buttons actions for each one - part 1

Grâce à Joel Hooks, j'ai pu faire fonctionner mon code. Cependant, cette fois-ci, au lieu d'utiliser un graphique importé en tant que Classe de ma bibliothèque, je crée plutôt un MovieClip en dessinant un dégradé * (pas besoin d'importer un fichier jpg) *. Maintenant, je reçois une autre erreur redoutée "pas compiler la constante de temps" erreur encore. Je crois que cela a quelque chose à voir avec la façon dont j'essaie de déterminer l'instance de bouton qui est cliquée ou rolledOver.

Le bouton Précédent création (travail) code:

for (var i: Number = 0; i < myXMLArray.length; i ++) { navButton = new NavButton; navButton.name = "button" + i; navButton.x = i * navSIZE; navButton.y = navBtnY; navButton.buttonMode = true; thumbsMov.addChild (navButton);

buttons.push (navButton); buttons [i] .addEventListener (MouseEvent.MOUSE_UP, handleButtonClick); buttons [i] .addEventListener (MouseEvent.ROLL_OVER, handleButtonOver); buttons [i] .addEventListener (MouseEvent.ROLL_OUT, handleButtonOff); }

L'auditeur précédent (travail) code:

function handleButtonOver(event:MouseEvent):void { 

bouton var: NavButton = event.target comme NavButton; var id: Number = Number (button.name.split ("bouton") 1); si (bouton) TweenLite.to (buttonRolls [id], .4, {alpha: 1, facilité: Strong.easeOut}); cataText [id] .defaultTextFormat = a12Green; cataText [id] .text = monXMLArray [id] .id; }

code de création bouton actuel:

for (var i:Number = 0; i < num; i++) { 
trace("loop number = "+i); 

var blueGradient:MovieClip = new MovieClip(); 
blueGradient.name = "button" +i; 
blueGradient.graphics.beginGradientFill(bGrad, bColors, bAlphas, bRatios ,bMatrix) 
blueGradient.graphics.drawRect(0, 0, 266, 40); 
blueGradient.x = i * navSIZE; 
blueGradient.y = navBtnY; 
blueGradient.buttonMode = true; 
addChild(blueGradient); 

buttons.push(blueGradient) 

buttons[i].addEventListener(MouseEvent.MOUSE_UP, handleButtonClick); 
buttons[i].addEventListener(MouseEvent.ROLL_OVER, handleButtonOver); 
buttons[i].addEventListener(MouseEvent.ROLL_OUT, handleButtonOff); 

}

bouton actuel Code auditeur:

function handleButtonOver(event:MouseEvent):void { 
var button:blueGradient = event.target as blueGradient; 
var id:Number = Number(blueGradient.name.split("button")[1]); 
if(blueGradient) 
cataText[id].defaultTextFormat = navFontRoll; 
cataText[id].text = myArray[id].id; 

}

Le film actuel ne fonctionne sans erreur si la ligne suivante est commenté:

var button:blueGradient = event.target as blueGradient; 

Parce que c'est ce qui provoque l'erreur constante compilez pas le temps de venir. Toutefois, en supprimant cette ligne, tous les boutons sont des boutons button1 au lieu de 2 créés dynamiquement nommés button0 et button1.

Toute aide ou pointeur ici serait grandement appréciée! Merci d'avance pour avoir regardé mon code.

+0

Je vous suggère de lire un peu à propos de la POO en Action Script - cela vous aidera beaucoup. Il y a des échantillons "prêts à partir" dans la documentation flash. Occupe-toi juste de "classe". – Konrad

Répondre

1

Je pense, puisque le mot-clé est as pour la coulée, vous voulez que cette ligne à la place:

var button:MovieClip = event.target as MovieClip; 

blueGradient semble être un nom de variable, pas un nom de classe.

+0

Hey merci! Cela a corrigé l'erreur .. merci :) –

2

Votre problème est que vous confondez la classe blueGradient avec l'objet bouton. Dans le gestionnaire d'origine, votre code dit:

var button:NavButton = event.target as NavButton; 
var id:Number = Number(button.name.split("button")[1]); 
if(button).... 

Mais dans votre nouveau code,

var button:blueGradient = event.target as blueGradient; 
var id:Number = Number(blueGradient.name.split("button")[1]); 
if(blueGradient) 

Voyez-vous la différence? Dans les deux cas, vous faites référence à votre objet bouton comme "bouton var" - mais dans la nouvelle version, vous écrivez "blueGradient.name.split ..." au lieu de "button.name.split ..." et le même pour votre if() déclaration.

Le mot-clé var définit le nom d'un objet. La syntaxe est var [objectName]: [objectType], et lorsque vous travaillez avec cet objet, vous voudrez toujours vous y référer par son nom plutôt que par son type. Sauf si vous avez une classe statique avec une méthode statique, mais c'est un peu plus avancé. Donc, en bref: remplacez "blueGradient" par "button" à ces deux endroits dans votre nouveau gestionnaire et cela devrait résoudre vos problèmes. J'espère que cela a aidé!

+0

Myk, si je peux vous donner un sugestion: utilisez MovieClip plutôt que NavButton répondre à une question - il peut être trompeur pour les débutants;) – Konrad