Ciao a tutti!
Da un po' mi sto cimentando con flash ed actionscript. Volendo creare un menu in flash che si appoggiasse ad un file xml per aggiungere le varie voci, ho fatto qualche ricerca sul web per poter avere una base da personalizzare. Ho trovato il seguente:
codice:
import fl.motion.Color;
var xmlData:XML=new XML();
var urlReq:URLRequest = new URLRequest("menu.xml");
var urlLoad:URLLoader=new URLLoader();
var menu:Array=new Array();
var posizioneMenu:String=new String();
var offset:Number=new Number();
var offsetRollOver:Number=new Number();
var window:String=new String();
var windowLink:String=new String();
var linktype:String=new String();
var posXmenu:Number=new Number();
var posYmenu:Number=new Number();
var rollMe:Boolean=new Boolean();
urlLoad.load(urlReq);
urlLoad.addEventListener(Event.COMPLETE, leggiXML);
function leggiXML(e:Event)
{
xmlData = XML(urlLoad.data);
showMenu();
}
function showMenu():void
{
posizioneMenu = xmlData. @ posizione;
offset = xmlData. @ offset;
window = xmlData. @ win;
linktype = xmlData. @ typeLink;
posXmenu = Number(xmlData. @ posX);
posYmenu = Number(xmlData. @ posY);
offsetRollOver = Number(xmlData. @ offsetRollOver);
for each (var prop:XML in xmlData.voce)
{
menu.push({labelMenu:prop.@labelText, labelUrl:prop.@labelUrl, labelX:prop.@posX, labelY:prop.@posY});
}
putLabel();
}
function putLabel():void
{
for(var i:Number=0; i<menu.length; i++){;
var menuVoice:MenuLabel=new MenuLabel();
menuVoice.did_txt.text = menu[i].labelMenu;
menuVoice.link = menu[i].labelUrl;
addChild(menuVoice);
switch (posizioneMenu)
{
case "v" :
menuVoice.x=780;
menuVoice.y=(menuVoice.height+offset)*i;
rollMe = true;
break;
case "h" :
menuVoice.x=(menuVoice.width+offset)*i;
rollMe = false;
break;
default :
trace("dato di posizionamento sbagliato");
break;
}
menuVoice.addEventListener(MouseEvent.CLICK, linkMe);
menuVoice.addEventListener(MouseEvent.MOUSE_OVER, overMe);
menuVoice.addEventListener(MouseEvent.MOUSE_OUT, outMe);
}
function linkMe(e:MouseEvent)
{
var path:URLRequest = new URLRequest(e.currentTarget.link);
if (linktype == "external")
{
switch (window)
{
case "new" :
windowLink = "_blank";
break;
case "old" :
windowLink = "_self";
break;
}
navigateToURL(path, windowLink);
}
else
{
var loader:Loader=new Loader();
addChild(loader);
loader.load(path);
if (! menu[e.currentTarget.link].labelX || ! menu[e.currentTarget.link].labelY)
{
loader.x = 0;
loader.y = 0;
}
else
{
loader.x = menu[e.currentTarget.link].labelX;
loader.y = menu[e.currentTarget.link].labelY;
}
}
}
function overMe(e:MouseEvent)
{
if (rollMe)
{
e.currentTarget.x += offsetRollOver;
}
else
{
e.currentTarget.y += offsetRollOver;
}
}
function outMe(e:MouseEvent)
{
if (rollMe)
{
e.currentTarget.x -= offsetRollOver;
}
else
{
e.currentTarget.y -= offsetRollOver;
}
}
}
Nome di istanza: "did_txt"
Il codice funziona perfettamente, ma volevo fare in modo che le ultime 2 voci di menu lette dal file xml fossero di diverso colore. Così ho modificato la funzione putLabel():
codice:
function putLabel():void
{
for(var i:Number=0; i<menu.length; i++){;
var menuVoice:MenuLabel=new MenuLabel();
var text_format:TextFormat=new TextFormat(); // <-
text_format.color = "0x003366"; // <-
menuVoice.did_txt.text = menu[i].labelMenu;
menuVoice.link = menu[i].labelUrl;
addChild(menuVoice);
switch (posizioneMenu)
{
case "v" :
menuVoice.x=780;
menuVoice.y=(menuVoice.height+offset)*i;
if ( i > menu.lenght - 2 ) menuVoice.setTextFormat(text_format); // <-
rollMe = true;
break;
case "h" :
menuVoice.x=(menuVoice.width+offset)*i;
rollMe = false;
break;
default :
trace("dato di posizionamento sbagliato");
break;
}
menuVoice.addEventListener(MouseEvent.CLICK, linkMe);
menuVoice.addEventListener(MouseEvent.MOUSE_OVER, overMe);
menuVoice.addEventListener(MouseEvent.MOUSE_OUT, outMe);
}
Dove sbaglio?