Ciao a tutti!
premesso che di action script so veramente poco e mi sto avvicinando adesso all'uso di questo script avrei un dubbio su un porcesso che sto creando abbastanza complicato..
ho una mappa e una lista di nomi che vengono presi da un file XML.
cliccando su uno di questi nomi dell'elenco la mappa deve zoomare in un punto derivato da 2 coordinate associate al nome sempre presenti nel mio file XML..
per fare apparire la lista di nomi ho richiamato nel mio filmato il file XML e ho fatto stampare la lista in un clip filmato che ho chiamato item_mc:
/* 1)creiamo un oggetto XML */
var caricaXML:XML = new XML();
/* 2)settiamo la proprietà ignoreWhite su true per ignorare gli spazi bianchi */
caricaXML.ignoreWhite = true;
/* 3)Specifichiamo nell'event handler onLoad la funzione che carichera i dati */
caricaXML.onLoad = leggiXML;
/* 4)carichiamo i dati del documento XML con il metodo load */
caricaXML.load("AZIENDA.xml");
//
/* 5)impostiamo la funzione "leggiXML" che ci caricherà i dati */
var posInit = item_mc._y;
/* 6)registriamo la posizione della MovieClip item_mc */
function leggiXML(succes:Boolean) {
if (succes == true) {
//trace(this);
//Dichiariamo le variabili per caricare il contenuto dei nodi
var prezzo:Array = [];
var descrizione:Array = [];
var titolo:Array = [];
var ics:Array = [];
var ipsilon:Array = [];
//"tempArray" --> Array temporaneo per caricare il contenuto del file XML
var tempArray:Array = new Array();
// Verifichiamo lunghezza dell'array
var tempArray = this.firstChild.childNodes;
//trace(tempArray.length);
//Effettuiamo il ciclo per leggere sui nodi
for (var i:Number = 0; i<tempArray.length; i++) {
tempArray[i].childNodes[0].firstChild;
titolo[i] = tempArray[i].childNodes[1].firstChild;
prezzo[i] = tempArray[i].childNodes[2].firstChild;
descrizione[i] = tempArray[i].childNodes[3].firstChild;
ics[i] = tempArray[i].childNodes[4].firstChild;
ipsilon[i] = tempArray[i].childNodes[5].firstChild;
//Dichiariamo una varibile di tipo MovieClip e duplichiamo "item_mc"
var item:MovieClip = item_mc.duplicateMovieClip("elemento"+i+"_mc", i);
//Assegiamo alla variabile "item" la posizione iniziale della clip "item_mc"
item._y = posInit;
//item._x = posInitx;
//Spostiamo di 20 px i clip filmato duplicati
posInit += 20;
//posInitx += 120;
// assegniamo alle clip duplicate i valori estratti da XML
item.titolo_txt.htmlText = titolo[i];
//item.prezzo_txt.htmlText = prezzo[i];
item.descrizione = descrizione[i];
item.ics = ics[i];
item.ipsilon = ipsilon[i];
item.onRelease = function() {
titolo_txt.htmlText = this.titolo;
zoomin(zoom, this.ics, -this.ipsilon, 100, 100, 2);
//mappabig();
//quadratini();
//quadratini_az();
//vediimprese();
this.titolo_txt.textColor = 0x5f829e;
oldId.titolo_txt.textColor = 000000;
oldId = this;
};
}
} else {
trace("file non trovato!");
}
}
come potete notare ho prima richiamato il file XML, successivamente ho creato un ciclo che mi stampi tutti i nomi delle aziende separati di 20 px tra loro...
successivamente ho creato una funzione che mi permetta di cliccare su ciascuno dei miei nomi, cambiando il colore una volta clilccati...
ho pensato:
se in questa funzione onRelease gli inserisco anche la funzione di zoom allora ad ogni nome che clicco mi entra in funzione lo zoom in base alle coordinate associate.
la formula è questa:
zoomin(zoom, this.ics, -this.ipsilon, 100, 100, 2);
dove:
this.ics
this.ipsilon
sono le coordinate della azienda selezionata (ho verificato con dei trace la reale presenza di questi valori)
il problema è che questa funzione non va...
la funzione zoomin è cosi strutturata:
function zoomin(clip, posArrivoX, posArrivoY, posScalaX, posScalaY, speed)
{
clip.onEnterFrame = function ()
{
clip._x = clip._x + Math.round(posArrivoX - clip._x) / speed;
clip._y = clip._y + Math.round(posArrivoY - clip._y) / speed;
clip._xscale = clip._xscale + Math.round(posScalaX - clip._xscale) / speed;
clip._yscale = clip._yscale + Math.round(posScalaY - clip._yscale) / speed;
if (clip._x == posArrivoX && this._y == posArrivoY)
{
this._x = posArrivoX;
this._y = posArrivoY;
delete clip.onEnterFrame;
} // end if
_global.xvar = clip._x - 599;
_global.yvar = clip._y - 268;
if (posArrivoY < 268)
{
_global.yvar = clip._y - 268;
}
else
{
_global.yvar = clip._y + 268;
} // end else if
if (posArrivoY > 268)
{
_global.yvar = clip._y + 268;
}
else
{
_global.yvar = clip._y - 268;
} // end else if
_global.xvarscale = clip._xscale;
_global.yvarscale = clip._yscale;
zoomout();
};
} // End of the function
e sono sicuro funzioni in quanto questo filmato, in precedenza, era statico e non si basava sul richiamo di un file XML...
infatti la funzione che ho inserito allinterno del ciclo in precedenza era cosi strutturata:
_root.elenco.azienda1.onRelease = function ()
{
zoomin(zoom, 563, -575, 100, 100, 2);
};
dove elenco era un clip dove al zuo interno erano presenti l'elenco edlle mie aziende inseriti come pulsanti.
Spero di essere stato chiaro.
Grazie

Rispondi quotando