Ciao,
sono 10 giorni che cerco di venire a capo di sto problema, ma prorpio non ci capisaco più nulla e non sono riuscito a risolvere nulla. Ho fatto domande su decine di forum e mai nessuno mi ha aiutato, spero che qui che siamo connazionali e ci intendiamo meglio si riesca a venirne a capo.
Questo è il problema. Ho messo su una applicazione abbastanza semplice che usa Papervision 3D per visualizzare a monitor delle figure tridimensionali ( per quel che riguarda papervision non ho alcun problema, quindi non si tratta di questo )
All'inizio dell'esecuzione del programma carico un file .xml contenete una lista di figure 3D da visualizzare, il file XML varia, ovvero dentro ci può essere una lista costituita da 2 elementi come da 50 o un numero a caso.
Code:
public function Main():void
{
//Carico il file xml contenente la lista di figure
myXML = new XML();
var XML_URL:String = "lista_figure.xml";
var myXMLURL:URLRequest = new URLRequest(XML_URL);
var myLoader:URLLoader = new URLLoader(myXMLURL);
myLoader.addEventListener("complete", xmlLoaded);
myLoader.load(myXMLURL);
function xmlLoaded(evtObj:Event):void {
myXML = XML(myLoader.data);
planes_number = new Number();
planes_number = myXML.plane.length();
trace(myXML.plane[0].row[0].value[0]);
init3D();//inizializzo il visualizzatore di figure
}
}
L'idea era quella di avere una semplice interfaccia che consentisse all'utente di visualizzare / nascondere le varie figure.
Ecco il lampo di genio: cosa meglio delle buon vecchie checkbox...?? Bene decisi di avvalermi di tale fantastico ed intutitivo strumento per riuscire ad implementare una cosa simile, ma mi condannai a morte.......il problema è che a parte le checkbox non saprei comunque che usare...
Come detto nel file .xml c'è la lista di figure con tutte le coordinate i nomi ecc.... una volta che il file .xml è in memoria parte l'esecuzione e renderizza a monitor le miei figure.
Nella fase di rendering pensai...devo aggiungere qua, mano a mano che disegno le figure la mia lista di checkbox, è così che ho creato una Panel ed una VBox nel mio programmino:
Questo invece è il codice che crea le miei figure 3D.
Code:
for (var y:int = 0; y < numero_totolae_figure; y++)
{
//trace("prova");
figura = new Figura(...lista paramentri);
lista_figure[y] = figura;
spazio3D.addChild(lista_figure[y]);
casellina.id = "ID " + y;
casellina.label = "Visualizza Figura - " + casellina.id.toString();
casellina.selected = true;
//Associao alla checkbox corrente un evento per cancellare/re-inserire la figura
casellina.addEventListener ( MouseEvent.CLICK, function():void{if(casellina.selected == false)spazio3D.removeChild(lista_figure[0]);else chart.addChild(lista_figure[0]);} );
casellina.x = 10;
listaCaselline.addChildAt(casellina, y);
}
}
Il codice precendente è palesemente errato o meglio è errato perchè nella logica tutte le checkbox create andrebbero a comandare la visualizzazione / cancellazione solo e soltanto dell'ultima figura a monito quella nella lista_figure con indice y=numero_totale_figure
Ora a parte questo il codice è inutile dire che non funziona viene un errore con su scritto che vado fuori dall'indice Errore 2006.
Ho provato a mettere il metoto addChild ma nulla così una liusta di checkbox non la si crea almeno che io sappia.
Gira che ti rigira ho visto che per creare una lista dinamica di caselline si usa una cosa simile:
private var stateList:Array = [
{ label: "Alaska", selected: false },
{ label: "Arkansas", selected: false },
{ label: "California", selected: false },
{ label: "Delaware", selected: false },
{ label: "Florida", selected: false },
{ label: "Georgia", selected: false },
{ label: "Hawaii", selected: false },
{ label: "Massachusetts", selected: false },
{ label: "Nevada", selected: false },
{ label: "Pennsylvania", selected: false },
{ label: "South Dakota", selected: false },
{ label: "Tennessee", selected: false },
{ label: "Utah", selected: false },
{ label: "Virginia", selected: false },
{ label: "Washington", selected: false }
];
private function showSelected():void
{
var s:String = "";
var n:int = stateList.length;
for (var i:int = 0; i < n; i++)
{
if (stateList[i].selected)
s += stateList[i].label + "\n";
}
ta1.text = s;
}
]]>
Il problema ? E' che non ci capisco più una mazza di nulla, e comunque in ambo i casi non riesco a farmi venire in mente nulla su come associare a ciascuna csella un evento PERSONALIZZATO per la figura 3D cui la casella fa riferimento....
Qualcuno ha delle idee ?
GRAZIE