2009-11-11 4 views
0

J'ai cette carte que je crée dans Flash. Vous cliquez sur un état, puis vous pouvez cliquer sur une icône pour afficher une info-bulle/popup de certaines informations. Ce que j'essayais de faire était de créer de nouvelles fonctions et les écouteurs d'événements pour chaque icône différente utilisent une boucle for ... mais ça ne va pas si bien. Je ne l'ai pas touché AS depuis longtemps avec moi ainsi d'ours :)Utilisation d'une boucle For avec un tableau et addEventListener

var ToolTipMC = map.toolTip; 
ToolTipMC.alpha = 0; 
var places:Array = new Array(); 

places = [ "map.paulsens", "map.plutonic", "map.jundee", "map.wiluna", "map.darlot", "map.lawers", "map.gwaliaDeeps", "map.sunriseDam", "map.marvelLoch" ]; 

function enableToolTips(event:MouseEvent):void { 
    ToolTipMC.x = places[ i ].x + 10; 
    ToolTipMC.y = places[ i ].y - (ToolTipMC.height - 9); 
    Tweener.addTween(ToolTipMC, { y: ToolTipMC.y + 5, alpha: 1, transition: "easeInOutExpo", time: 0.3 }); 
    ToolTipMC.toolTipTextField.text = "It worked!"; 
    trace("Mouse Over"); 
} 

function disableToolTips(event:MouseEvent):void { 
    Tweener.addTween(ToolTipMC, { alpha: 0, transition: "easeInOutExpo", time: 0.3 }); 
    trace("Mouse Out"); 
} 

for(var i:uint = 0; i < places.length; i++) { 
    places[ i ].addEventListener(MouseEvent.MOUSE_OVER, enableToolTips); 
    places[ i ].addEventListener(MouseEvent.MOUSE_OUT, disableToolTips); 
} 

Les éléments du tableau sont les noms d'instance et je suis en utilisant la classe Tweener (es).

Ce qui suit génère une erreur de sortie de

TypeError: Error #1006: value is not a function

et s'arrête au

places[ i ].addEventListener(MouseEvent.MOUSE_OVER, enableToolTips); 

donc de ce que je peux comprendre qu'il a des problèmes d'analyse syntaxique les valeurs du tableau par l'écouteur d'événement, mais c'est aussi loin que j'ai eu :). Quelqu'un pourrait-il m'aider s'il vous plaît avec mon dilema?

Répondre

1

Je vois quelques choses qui pourraient être à l'origine du problème:

  1. Les places sont « chaînes », non IEventDispatchers
  2. Vous ne savez pas que vous pouvez exécuter une boucle for en dehors d'une fonction, essayez l'enveloppant dans une fonction.

Voici à quoi cela pourrait ressembler.


function addListeners():void { for(var i:uint = 0; i < places.length; i++) { (places[ i ] as IEventDispatcher).addEventListener(MouseEvent.MOUSE_OVER, enableToolTips); (places[ i ] as IEventDispatcher).addEventListener(MouseEvent.MOUSE_OUT, disableToolTips); } }

Il faudrait convertir places à un tableau de IEventDispatchers, la carte peut-être des articles ou tout ce que vous faites, certains DisplayObject.

Espérons que ça aide!

+0

Bon bien cette erreur a généré une pour les EnableToolTips() parce que les endroits [i] n'ont pas de 'i' référencé dans la fonction. Donc j'ai placé un autre pour la boucle (en utilisant i, devrais-je utiliser un autre var?) Là et pas d'erreurs. Mais l'info-bulle MovieClip n'apparaît pas lorsque je survole les icônes. Des idées? Merci beaucoup pour votre aide :-) –

+0

Ceci est la bonne réponse - voir ma réponse pour l'aide avec votre erreur ultérieure ... – Reuben

1

Suite à la réponse de viatropos - Je suppose que vous voulez accéder à la "place" avec votre info-bulle qui a envoyé l'événement? Vous pouvez le faire en utilisant event.target:

function enableToolTips(event:MouseEvent):void { 
    var place:DisplayObject = DisplayObject(event.target); 
    ToolTipMC.x = place.x + 10; 
    ToolTipMC.y = place.y - (ToolTipMC.height - 9); 

    //the rest of your function... 
} 

(je suppose aussi que vos « lieux » sont MovieClips placés sur la scène - d'où la fonte à DisplayObject)

+0

Merci pour votre aide Reuben :-). Bon d'accord, le code ci-dessus ne pose aucun problème si ce n'est que l'infobulle MovieClip n'apparaît toujours pas. La fonction enableToolTips() est-elle activée? La trace ne tire même pas. J'ai enlevé le positionnement x et y juste pour voir s'il était déplacé hors écran mais toujours rien. Oui, mes emplacements [] éléments de tableau sont des noms d'occurrence de MovieClips sur la scène. J'ai chaque icone movieclip dans le MovieClip 'map'. –

+0

Votre code probablement n'ajoute pas correctement les écouteurs, je ne suis pas sûr si vous pouvez simplement convertir les chaînes en IEventDispatchers et avoir ce travail - Si vos places sont sur la scène dans une carte movieclip vous n'avez pas à les référencer via des chaînes, essayez de remplacer places = ["map.paulsens", "map.plutonic", ... avec des places = [map.paulsens, map.plutonic, ... de cette façon vous aurez une référence directe au MovieClip vous pouvez ajouter des écouteurs d'événement. – Reuben

+0

C'est ce que j'ai fait :). Merci pour votre aide Reuben! –

Questions connexes