Questa volta proverò a spiegarvi come ho cercato di risolvere la creazione
di un grafico a torta facilmente personalizzabile.
La questione era: dati un numero x di coppie di valori (testo/numero) creare
un grafico a torta in cui le fette della torta siano una diversa dalle altre,
ed affiancare al grafico una legenda adeguata.
Ho quindi pensato che il modo migliore per risolvere il problema era quello
di creare un fettina piccolina di grafico a torta (cioè uno spicchio
del valore di un grado circolare) che poi avrò duplicato e colorato per
360 volte (l'angolo giro), e un campo testo con una casellina da colorare come
la porzione di grafico corrispondente.

Mi raccomando: il fulcro dello spicchio deve corrispondere al centro dell'ipotetico
cerchio di cui lo spicchio è la 360esima parte.
Da notare anche la presenza di una linea che servirà a dividere più
marcatamente le varie fette di torta.
Vedrete poi che tutto il codice AS risiede in un unico frame...

Partiamo col codice...
// creo un ID per identificare i vari cloni del mio spicchio
id = -1;
// imposto le coppie di valori che creeranno il grafico
valori = new Array("uno", 100, "due", 20, "tre",
10, "tizio", 20, "caio", 30, "pippo", 90);
Sarebbe interessante poter importare i valori da un file esterno, ma non ho
ancora capito come farlo :-P
// determino quanti valori sono in gioco
quantivalori = valori.length;
// calcolo il totale di tutti i valori numerici
// per sapere quante fette dovrò fare
for (i=1; i<quantivalori; i=i+2) {
totalevalori = totalevalori+valori[i];
}
// inizio il ciclo che mi crea una fetta di torta
// per ogni coppia di valori
// in rapporto al totale di 360 gradi
for (i=1; i<quantivalori; i=i+2) {
spicchi = 360/totalevalori*valori[i];
// imposto una terna di colori casuali RGB
r = random(255);
g = random(255);
b = random(255);
// creo una fetta di torta duplicando lo spicchio le
volte necessarie
for (ii=0; ii<spicchi; ii++) {
duplicateMovieClip (spicchio, "spicchio"+id, id);
setProperty ("spicchio"+id, _rotation, id);
// ...e coloro gli spicchi che compongono la stessa fetta
myColor = new Color("spicchio"+id);
myColorTransform = new Object();
myColorTransform.rb = r;
myColorTransform.gb = g;
myColorTransform.bb = b;
myColorTransform.ra = 0;
myColorTransform.ga = 0;
myColorTransform.ba = 0;
myColor.setTransform(myColorTransform);
// ogni spicchio deve avere un ID diverso
id = id+1;
}
// ora duplico e personalizzo anche la didascalia della
legenda
duplicateMovieClip (campo, "campo"+id, id+720);
setProperty ("campo"+id, _y, ((i/2)*30)-122);
myColor = new Color("campo"+id+".quadro");
myColorTransform = new Object();
myColorTransform.rb = r;
myColorTransform.gb = g;
myColorTransform.bb = b;
myColorTransform.ra = 0;
myColorTransform.ga = 0;
myColorTransform.ba = 0;
myColor.setTransform(myColorTransform);
// imposto il valore del nuovo campo testo
set ("campo"+id+".testo", valori[i-1]+" : "+Math.round(valori[i]*100/totalevalori)+"%");
// metto una linea a dividere le fette
duplicateMovieClip (linea, "linea"+id, id+360);
setProperty ("linea"+id, _rotation, id);
}
Noterete comunque qualcosa di strano, tipo: "perchè il campo testo
(la didascalia) originale è fuori dallo stage?" "Perchè
altrimenti si vedeva nel filmato!"
Non ho voluto aggiustare questa piccolezza perchè il succo del tutorial
era la creazione del grafico, e quindi vi lascio fare a voi ('tanto non è
difficile!).
Buon lavoro a tutti! :-)