Flash: passare variabili ad una function

Di: alispiegate | 26/09/2020 18:01:18
Hola!
Più che una richiesta d'aiuto (in quanto ho trovato una soluzione!) questa vorrebbe essere una richiesta del perchè di questo comportamento:
...ho scritto un codice che legge da un file xml i pulsanti per un menù, alcuni pulsanti possono avere a sua volta dei sotto menu...
...la disposizione dei pulsanti sullo stage poi avviene automaticamente e questo è il codice:
caricamento:
// variabili per la lettura del file XML
var menu:MovieClip = _root.createEmptyMovieClip("menu",_root.getNextHighestDepth());
var numOfItems:Number;
var xml:XML = new XML();
xml.ignoreWhite = true;
xml.load(path+"personaggi.xm");
xml.onLoad = function()
{
var nodes = this.firstChild.childNodes;
numOfItems = nodes.length;
for(var i=0;i<numOfItems;i++)
{
var mc = menu.attachMovie("pulsante","pulsante"+i,menu.getNextHighestDepth());
mc.pos = i+1;
mc.nome = nodes[i].attributes.nome;
mc.content = nodes[i].attributes.content;
mc.onEnterFrame = posizione_menu;
mc.onRollOver = over;
mc.onRollOut = out;
mc.onPress = pressed;
mc.onRelease = mc.onReleaseOutside = released;
// per i pulsanti con sottomenù
if (nodes[i].hasChildNodes())
{
mc.subMenuNodes = nodes[i].childNodes;
mc.numOfSubMenu = mc.subMenuNodes.length;
mc.submenu;
}
else
{
mc.numOfSubMenu = 0;
}
}
}
posizionamento:
function posizione_menu()
{
var margine:Number = (stage._width - (this._width * numOfItems))/(numOfItems+1);
var posizione:Number = (margine*this.pos) + ((this._width*this.pos) - this._width);
this.tipText.text = this.nome;
this._x = posizione;
this._y = 5.0;
// rimuovo l'evento.
this.onEnterFrame = NULL;
delete this.onEnterFrame;
}
e questo codice funziona perfettamente!!!
Nella prima versione invece avevo usato questo codice:
caricamento:
// variabili per la lettura del file XML
var menu:MovieClip = _root.createEmptyMovieClip("menu",_root.getNextHighestDepth());
var numOfItems:Number;
var xml:XML = new XML();
xml.ignoreWhite = true;
xml.load(path+"personaggi.xm");
xml.onLoad = function()
{
var nodes = this.firstChild.childNodes;
numOfItems = nodes.length;
for(var i=0;i<numOfItems;i++)
{
var mc = menu.attachMovie("pulsante","pulsante"+i,menu.getNextHighestDepth());
mc.nome = nodes[i].attributes.nome;
mc.content = nodes[i].attributes.content;
mc.onEnterFrame = posizione_menu(i+1);
mc.onRollOver = over;
mc.onRollOut = out;
mc.onPress = pressed;
mc.onRelease = mc.onReleaseOutside = released;
// per i pulsanti con sottomenù
if (nodes[i].hasChildNodes())
{
mc.subMenuNodes = nodes[i].childNodes;
mc.numOfSubMenu = mc.subMenuNodes.length;
mc.submenu;
}
else
{
mc.numOfSubMenu = 0;
}
}
}
posizionamento:
function posizione_menu(pos:Number)
{
var margine:Number = (stage._width - (this._width * numOfItems))/(numOfItems+1);
var posizione:Number = (margine*pos) + ((this._width*pos) - this._width);
this.tipText.text = this.nome;
this._x = posizione;
this._y = 5.0;
// rimuovo l'evento.
this.onEnterFrame = NULL;
delete this.onEnterFrame;
}
In questa prima versione avevo evitato di creare una variabile all'interno del movie "mc" che contesesse la sua posizione "mc.pos" delegando questo compito al passaggio di una variabile al metodo "posizione_menu" solo che facendo così tutto il contenuto dello Stage veniva spostato alla coordinate dei pulsanti...
...qualcuno saprebbe spiegarmi il perchè di questo comportamento e se per caso è normale che sia così e sono io che ho fatto un errore di utilizzo del codice?
...grazie per l'aiuto!...
PS: nel codice uso la variabile "stage._width" (stage è un movie caricato con alpha a 0) al posto di "Stage.width", questo non è un errore ma è dovuto al fatto che questo stesso movie è caricato in un altro movie e le proprietà dello "Stage" sarebbero poi state quelle del movie che carica questo!!

Risposte


Nessuna risposta trovata!