2009-12-10 4 views
0

Donc, fondamentalement, j'ai cette carte. Sur cette carte j'ai des points, et quand vous cliquez sur ces points, il va à une URL.Utilisation de boucles, tableaux et IEventDispatcher avec URLRequest

La configuration de code est le suivant:

  • tableaux pour définir la movieclip emplacements et un autre pour les URL (celui-ci est un tableau associatif). Je crée ensuite une boucle de fonction pour que soit un écouteur d'événement pour chaque point. Lorsque le point est cliqué, il exécute une autre fonction qui gère les URL .

  • La fonction URL est de saisir le point cible qui a été un clic, utilisez le type de tableau d'url pour trouver la clé, puis le jeter dans la URLRequest.

Jusqu'à présent, j'ai ce code:

var places:Array = new Array(); 
places = [ 
map.paulsens, map.paraburdoo, map.plutonic, map.wiluna, map.gwalia, map.wallaby, 
map.sunrise, map.moora, map.marvel, map.flyingFox, map.ernest, map.rosebery, 
map.lyell, map.renison, kalMap.kanowna, kalMap.frogsLeg, kalMap.tindals, 
kalMap.miitel, kalMap.higginsville 
]; 

var links:Array = new Array(); 
links[ "paulsens" ] = "http://mywebsite.com/"; 
links[ "paraburdoo" ] = "http://mywebsite.com/"; 
links[ "plutonic" ] = "http://mywebsite.com/"; 
links[ "wiluna" ] = "http://mywebsite.com/"; 
links[ "gwalia" ] = "http://mywebsite.com/"; 
links[ "wallaby" ] = "http://mywebsite.com/"; 
links[ "sunrise" ] = "http://mywebsite.com/"; 
links[ "moora" ] = "http://mywebsite.com/"; 
links[ "marvel" ] = "http://mywebsite.com/"; 
links[ "flyingFox" ] = "http://mywebsite.com/"; 
links[ "ernest" ] = "http://mywebsite.com/"; 
links[ "rosebery" ] = "http://mywebsite.com/"; 
links[ "lyell" ] = "http://mywebsite.com/"; 
links[ "renision" ] = "http://mywebsite.com/"; 
links[ "kanowna" ] = "http://mywebsite.com/"; 
links[ "frogsLeg" ] = "http://mywebsite.com/"; 
links[ "tindals" ] = "http://mywebsite.com/"; 
links[ "miitel" ] = "http://mywebsite.com/"; 
links[ "higginsville" ] = "http://mywebsite.com/"; 

function listenerLoop():void { 
    var i:int; 
    for(i = 0; i < places.length; i++) { 
     (places[ i ] as IEventDispatcher).addEventListener(MouseEvent.CLICK, openLink); 
    } 
} 

function openLink(event:MouseEvent):void { 
    var link:URLRequest = new URLRequest(links[ event.target ]); 
    navigateToURL(link, "_blank"); 
} 

listenerLoop(); 

Maintenant, tout fonctionne bien jusqu'à ce que je clique sur le point, me donner cette erreur:

TypeError: Error #2007: Parameter url must be non-null. 
at global/flash.net::navigateToURL() 

à

navigateToURL(link, "_blank"); 

Donc, il est évident pour moi que l'openLink(); la fonction ne fait pas ce que je veux. Je peux en quelque sorte deviner parce que event.target n'est pas retourné dans une chaîne ou ne tire pas le type du tableau? Je suis un ActionScripter très rouillé si nue avec moi :).

Des idées sur comment faire fonctionner cette chose? Bravo pour toute aide.

Répondre

0

essayer

var link:URLRequest = new URLRequest(links[ event.target.name ]); 

et puisque vous définissez les chaînes pour vous iterator il peut être préférable de ne définir vos liens comme un objet en faveur d'un tableau

+0

Ahaha, une solution si simple. Merci Andy :) Voulez-vous dire déclarer le type de données du tableau associatif en tant qu'objet plutôt qu'en tant que tableau? ie var array: Object = new Object(); ? – Jarryd

0

Essayez de stocker les liens dans un objet flash.utils.Dictionary, depuis il utilise des références de mémoire en tant que clés, et vous pouvez donc accéder aux éléments en faisant links[ event.target ].

Pour l'initialiser, vous devez également utiliser les objets comme clé.

links[ map.lyell ] = "http://mywebsite.com/"; 
links[ map.renision ] = "http://mywebsite.com/"; 
+0

Merci kajyr, je vais essayer. – Jarryd