// ...................................................................
// NAME : RuotaOggetto.fla - [ CS3 - AS3 ]
// Esempio di rotazione di un oggetto caricando, da un file
// XML, gli n "scatti" (.jpg)
//
// Il file XML :
//
// <scatti>
// <foto url="scatto1.jpg" />
// <foto url="scatto2.jpg" />
// <foto url="scatto3.jpg" />
// etc.....
// </scatti>
//
// ... sullo stage sono presenti i bottoni btn_sx e btn_dx
//
// ...................................................................
import flash.display.Loader;
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.IOErrorEvent;
// ... variabili globali :
var richiestaXML :URLRequest;
var caricatoreXML :URLLoader;
var gestoreXML :XML;
var listaFotoUrl :XMLList;
var richiestaIMG :URLRequest;
var caricatoreIMG :Loader;
var caricatoreInfoIMG :LoaderInfo;
// ... Array contenente le immagini caricate dal file XML
var arrayIMG :Array;
// ... il numero di immagini presenti nel file XML
var numImages :uint;
// ... l'immaggine corrente (l'iesimo scatto)
var currentImage :uint;
// ... i timer per la gestione continua della rotazione
var timerSinistra :Timer;
var timerDestra :Timer;
// ... crea gli oggetti relativi :
// ... l'oggetto URL relativo al File XML
richiestaXML = new URLRequest();
// ... l'oggetto URLLoader per il caricamento dell'XML
caricatoreXML = new URLLoader();
// ... l'ascoltatore evento : COMPLETE al caricatore XML
caricatoreXML.addEventListener(Event.COMPLETE, completatoCaricamentoXML);
// ... l'ascoltatore evento : IO_ERROR per eventuali errori
caricatoreXML.addEventListener(IOErrorEvent.IO_ERROR, erroreCaricamentoXML);
// ... l'Array che conterrà le immagini caricate
arrayIMG = new Array();
// ... gli oggetti timer per la rotazione continua
// ( impostare i millisisecondi : es. 85 )
timerSinistra = new Timer(85, 0);
timerSinistra.addEventListener("timer", onTimerSinistra);
timerDestra = new Timer(85, 0);
timerDestra.addEventListener("timer", onTimerDestra);
// ...
// ... assegna l'url relativo al file XML da caricare
richiestaXML.url = "scatti.xml";
// ... ok, carica il file XML
caricatoreXML.load(richiestaXML);
// ...
// ...................................................................
// FUNCTION : completatoCaricamentoXML()
// Evento : COMPLETE
// questa funzione sara' richiamata quando il file XML
// sara' copletamente caricato
// ...................................................................
function completatoCaricamentoXML(evento:Event):void
{
// ... caricamento del File XML Completato!
// ... crea un oggetto XML :
// ... l'oggetto XML consente di accedere ed
// estrarre i valori relativi ai TAGS ed agli
// ATTRIBUTI di un contenuto di dati XML.
// ... al costruttore viene passata la proprietà .data
// dell'URLoader (il contenuto dei dati letti)
gestoreXML = new XML(caricatoreXML.data);
// ... <foto url="scatto1.jpg" />
// ... estrai i valori di tutti gli ATTRIBUTI url
// del TAG <foto> ed inseriscili in un oggetto XMLList
listaFotoUrl = gestoreXML.foto.@url;
// ... ora nell'array : listaFotoUrl ci sono i nomi di tutte
// le immagini da caricare
// ... salva il numero dei TAGS <foto> presenti nel file XML
// ( corrisponde al numero di immagini )
numImages = listaFotoUrl.length();
// ... imposta l'indice dell'Immagine corrente a ZERO
currentImage = 0;
// ... ok!, carica la prima immagine
caricaImmagine(currentImage);
}
// ...................................................................
// ...................................................................
// FUNCTION : erroreCaricamentoXML()
// Evento : IO_ERROR
// questa funzione sara' richiamata se dovesse verificarsi
// un errore durante durante il caricamento del file XML
// ...................................................................
function erroreCaricamentoXML(evento:IOErrorEvent):void
{
// ...
// trace("... errore caricamento file XML : " + evento.type);
}
// ...................................................................
// ...................................................................
// FUNCTION : caricaImmagine()
// caricamento di una singola immagine (i-esima)
// ...................................................................
function caricaImmagine(p_idxImg:uint):void
{
// ... crea gli oggetti per il caricamento del'iesima immagine
// ... l'oggetto URL
richiestaIMG = new URLRequest();
// ... l'oggetto Loader
caricatoreIMG = new Loader();
// ... il contentLoaderInfo a cui associare gli asoltatori
caricatoreInfoIMG = LoaderInfo(caricatoreIMG.contentLoaderInfo);
// ... aggiungi gli asacoltatori :
// ... l'ascoltatore evento : COMPLETE al caricatore XML
caricatoreInfoIMG.addEventListener(Event.COMPLETE, completatoCaricamentoIMG);
// ... l'ascoltatore evento : IO_ERROR per eventuali errori
caricatoreInfoIMG.addEventListener(IOErrorEvent.IO_ERROR, erroreCaricamentoIMG);
// ... assegna url dell'immagine da caricare
richiestaIMG.url = listaFotoUrl[p_idxImg];
// ... ok!, carica l'iesima immagine
caricatoreIMG.load(richiestaIMG);
}
// ...................................................................
// ...................................................................
// FUNCTION : completatoCaricamentoIMG()
// Evento : COMPLETE
// questa funzione sara' richiamata al caricamento
// completato di ogni immagine
// ...................................................................
function completatoCaricamentoIMG(evento:Event):void
{
// ... l'iesima IMG e' stata caricata completamente!
// ... l'immagine caricata
var imgLoader:Loader = Loader(evento.currentTarget.loader);
// ... salva l'immagine nell'Array
arrayIMG[currentImage] = imgLoader;
// ... controlla se tutte le immagini sono state caricate
if ( currentImage < (numImages - 1) )
{
// ... no, incrementa contatore
currentImage++;
// ... e carica la prossima
caricaImmagine(currentImage);
}
else
{
// ... Ok!, TUTTE le immagini sono state caricate nell'Array
// ... reimposta l'indice dell'immagine corrente
currentImage = 0;
// ... aggiungi gli ascoltatori per la gestione degli eventi
// sui Bottoni (SINISTRA e DESTRA)
btn_sx.addEventListener(MouseEvent.MOUSE_DOWN, onMouseGiu);
btn_dx.addEventListener(MouseEvent.MOUSE_DOWN, onMouseGiu);
btn_sx.addEventListener(MouseEvent.MOUSE_UP, onMouseSu);
btn_dx.addEventListener(MouseEvent.MOUSE_UP, onMouseSu);
// ... imposta il Mouse mode ( cursor Hand )
btn_sx.buttonMode = true;
btn_dx.buttonMode = true;
// ... e visualizza la prima immagine!
ShowImage(currentImage);
}
}
// ...................................................................
// ...................................................................
// FUNCTION : erroreCaricamentoIMG()
// Evento : IO_ERROR
// questa funzione sara' richiamata se dovesse verificarsi
// un errore durante durante il caricamento di un'immagine
// ...................................................................
function erroreCaricamentoIMG(evento:IOErrorEvent):void
{
// ...
// trace("... errore caricamento file IMG : " + evento.type);
}
// ...................................................................
// ...................................................................
// FUNCTION : ShowImage()
// visualizzaione dell'i-esima immagine
// ...................................................................
function ShowImage(p_idxImg:uint)
{
// ... dichiara una variabile locale
var img:Loader;
// ... get dell'immagine
img = arrayIMG[p_idxImg];
// ... posiziona l'immagine sullo Stage (o in altro contenitore)
img.x = 100;
img.y = 10;
// ... aggiungi l'immagine allo stage (o ad altro contenitore)
addChild(img);
}
// ...................................................................
// ...................................................................
// FUNCTION : onMouseGiu()
// Evento : MOUSE_DOWN
// questa funzione sara' richiamata al MOUSE DOWN su uno
// dei due bottoni
// ...................................................................
function onMouseGiu(evento:MouseEvent)
{
// ... variabile locale che conterra' il riferimento del bottone
var btn :MovieClip;
// ... get del Bottone
btn = MovieClip(evento.currentTarget);
// ... test del Bottone
if (btn == btn_sx)
{
// ... ruota una sola volta a sinistra
vaiSinistra();
// ... e START del timer di sinistra
timerSinistra.start();
}
else
{
// ... ruota una sola volta a destra
vaiDestra();
// ... e START del timer di destra
timerDestra.start();
}
}
// ...................................................................
// ...................................................................
// FUNCTION : onMouseSu()
// Evento : MOUSE_UP
// questa funzione sara' richiamata al MOUSE UP su uno
// dei due bottoni
// ...................................................................
function onMouseSu(evento:MouseEvent)
{
// ... variabile locale che conterra' il riferimento del bottone
var btn :MovieClip;
// ... get del Bottone
btn = MovieClip(evento.currentTarget);
// ... test del Bottone
if (btn == btn_sx)
{
// ... STOP del timer di sinistra
timerSinistra.stop();
}
else
{
// ... STOP del timer di destra
timerDestra.stop();
}
}
// ...................................................................
//.....................................................................
// FUNCTION : onTimerSinistra()
// Evento : TIMER
// questa funzione sara' richiamata ogni n millisecondi
// dall'avvio del timer a cui e' associata
//.....................................................................
function onTimerSinistra(evento:TimerEvent):void
{
// ... al MOUSE DOWN il timer e' avviato, ma continua la
// visalizzazione delle immagini solo se e' trascorso
// un po' di tempo ( es. dopo 3 * millisiecodi )
if ( timerSinistra.currentCount > 3 )
{
vaiSinistra();
}
}
//.....................................................................
//.....................................................................
// FUNCTION : onTimerDestra()
// Evento : TIMER
// questa funzione sara' richiamata ogni n millisecondi
// dall'avvio del timer a cui e' associata
//.....................................................................
function onTimerDestra(evento:TimerEvent=null):void
{
// ... al MOUSE DOWN il timer e' avviato, ma continua la
// visalizzazione delle immagini solo se e' trascorso
// un po' di tempo ( es. dopo 3 * millisiecodi )
if ( timerDestra.currentCount > 3 )
{
vaiDestra();
}
}
//.....................................................................
//.....................................................................
// FUNCTION : vaiSinistra()
// visualizza l'immagine precedente nell'Array
//.....................................................................
function vaiSinistra():void
{
// ... remove dell'iesima immagine
removeChild(arrayIMG[currentImage])
// ... controlla l'indice
if ( currentImage == 0 )
{
// ... se la prima, vai all'ultioma
currentImage = (numImages - 1);
}
else
{
// ... decrementa
currentImage--;
}
// ... e visualizza l'immagine precedente
ShowImage(currentImage);
}
//.....................................................................
//.....................................................................
// FUNCTION : vaiDestra()
// visualizza l'immagine seguente nell'Array
//.....................................................................
function vaiDestra():void
{
// ... remove dell'iesima immagine
removeChild(arrayIMG[currentImage])
// ... controlla l'indice
if ( currentImage < (numImages - 1))
{
// ... incrementa
currentImage++;
}
else
{
// ... ricomincia
currentImage = 0;
}
// ... e visualizza l'immagine seguente
ShowImage(currentImage);
}
//.....................................................................
// ... end of JOB