Creare un rotatore di immagini in Flash utilizzando XML e ActionScript 3.0

In questo tutorial imparerai come creare un semplice Rotatore di immagini da zero usando Flash, XML e ActionScript 3.0.




Passaggio 1: breve panoramica

Questo rotatore di immagini è creato quasi completamente da solo codice.

Durante i primi passi, imposteremo le proprietà del file Fla e incorporeremo alcuni tipi di carattere per migliorare l'aspetto dell'immagine. Aggiungiamo anche un preloader per indicare la transizione automatica delle immagini.

Passaggio 2: configurazione

Apri Flash e crea un nuovo file Flash (ActionScript 3.0).

Imposta le dimensioni dello stage su 600 x 300 px e la velocità del fotogramma su 24 fps.

Passaggio 3: incorporare i caratteri

Per dare un aspetto migliore alla nostra applicazione utilizzeremo i caratteri incorporati.

Aprire il pannello Libreria (Cmd + L) e fare clic con il pulsante destro del mouse nell'area degli elementi per visualizzare un menu di scelta rapida.

Selezionare Nuovo carattere e scegli un font che ti piace. Ricordarsi di selezionare la dimensione effettiva che si intende utilizzare nel film.

Ho usato Helvetica Bold per il titolo dell'immagine e FFF Harmony per la descrizione.

Passaggio 4: Preloader

Un filmato di preloader MovieClip verrà usato come indicazione del progresso, questo dirà all'utente che le immagini stanno giocando automaticamente.

In questo esempio, ho utilizzato il Preloader di Apple Inspired che abbiamo creato prima qui su ActiveTuts +. Useremo solo l'animazione, quindi non c'è bisogno di copiare il codice. Il nostro codice passerà all'immagine successiva ogni volta che l'animazione del preloader scorre.

Passaggio 5: ottieni alcune immagini

Non sarebbe un Image Rotator senza immagini, quindi sceglili dalla tua collezione personale o scaricane alcuni per i test.

Queste sono le immagini della demo, ottenute da Flickr, tutte con una licenza Creative Commons.

Grass 01 di 100kr

impatto profondo sul colore del pianeta da parte di spettacolopuro

Yosemite: colori autunnali di tibchris

Le immagini sono state ridimensionate a 600x300 px per adattarsi alle dimensioni del filmato.

Passaggio 6: scrivere l'XML

Un file XML verrà caricato dall'applicazione; questo file conterrà tutte le informazioni sulle immagini come Titolo, URL dell'immagine e Descrizione.

Apri il tuo editor preferito e scrivi:

     

Passaggio 7: creare la classe del documento

Crea un nuovo documento ActionScript e salvalo come ImageRotator.as.

Passaggio 8: Importa classi necessarie

Queste sono le classi richieste. Per una descrizione più dettagliata di ogni classe, fare riferimento alla Guida di Flash (premere F1 in Flash).

 package import fl.transitions.Tween; importare fl.transitions.easing.Strong; importare fl.transitions.TweenEvent; import flash.display.Sprite; import flash.net.URLLoader; import flash.net.URLRequest; import flash.display.Loader; import flash.text.TextField; import flash.text.TextFormat; import flash.text.TextFieldAutoSize; import flash.text.AntiAliasType; import flash.utils.Timer; import flash.events.TimerEvent; import flash.events.Event; import flash.events.MouseEvent;

Passaggio 9: iniziare la lezione

Il si estende keyword definisce una classe che è una sottoclasse di un'altra classe. La sottoclasse eredita tutti i metodi, le proprietà e le funzioni, in questo modo possiamo usarli nella nostra classe.

Faremo in modo che la nostra classe di documenti estenda Sprite, poiché non ha bisogno di una timeline.

 ImageRotator di classe pubblica estende Sprite 

Passaggio 10: dichiarare le variabili

Queste sono le variabili che useremo; ciascuno è spiegato nei commenti.

 private var xml: XML; // Memorizza le informazioni sul file xml private var urlLoader: URLLoader; // Carica l'URL del file xml private var imagesVector: Vector. = nuovo vettore.(); // Memorizza le immagini caricate nell'oggetto Loader private var imagesCounter: int = 0; interpolazione privata: Tween; private var lastTarget: *; // Ottiene l'ultima immagine cliccata, in modalità di transizione manuale private var tweening = false; private var infoCounter: int = 0; // Modifica le informazioni xml per visualizzare private var infoPanel: Sprite = new Sprite (); private var titleField: TextField = new TextField (); descrizione var privata: TextField = new TextField (); private var titleFormat: TextFormat = new TextFormat (); descrizione var privataTF: TextFormat = new TextFormat (); timer var privato: timer; private var preloader: Preloader = new Preloader (); // Il precaricatore nella variabile privata Library ha aggiunto: Boolean; // Controlla se il preloader è in stage private var titleFont: Helvetica = new Helvetica (); // Instantiate Caratteri incorporati private var bitmapFont: Harmony = new Harmony ();

Passaggio 11: scrivere la funzione di costruzione

Il costruttore è una funzione che viene eseguita quando un oggetto viene creato da una classe. Questo codice è il primo ad essere eseguito quando si crea un'istanza di un oggetto o viene eseguita utilizzando la Document Class. In questo caso, sarà il primo codice eseguito all'avvio del nostro SWF.

I parametri iniziali hanno valori predefiniti; questo ci permetterà di usare la classe come una classe di documenti e come un esempio.

I parametri sono l'URL del file XML e il tempo in cui l'oggetto Timer attenderà di effettuare una transizione tra le immagini; questo numero deve essere più alto della durata della transizione Tween (un secondo di default).

 funzione pubblica ImageRotator (xmlPath: String = "images.xml", interval: int = 2000): void 

Passaggio 12: scrivere il codice costruttore

Questo codice va all'interno del costruttore. Avvia il timer, imposta il formato di testo predefinito per i campi di testo e chiama la funzione loadXML.

 timer = nuovo Timer (intervallo); titleFormat.bold = true; titleFormat.font = titleFont.fontName; titleFormat.color = 0xFFFFFF; titleFormat.size = 14; descriptionTF.font = bitmapFont.fontName; descriptionTF.color = 0xEEEEEE; descriptionTF.size = 8; titleField.defaultTextFormat = titleFormat; titleField.autoSize = TextFieldAutoSize.LEFT; titleField.embedFonts = true; titleField.antiAliasType = AntiAliasType.ADVANCED; description.defaultTextFormat = descriptionTF; description.autoSize = TextFieldAutoSize.LEFT; description.embedFonts = true; loadXML (xmlPath); 

Passaggio 13: caricare il file XML

Questa funzione utilizza l'oggetto URLLoader per caricare il file XML specificato nel parametro del costruttore. La funzione parseXML (nel passaggio successivo) è impostata per l'esecuzione al termine del caricamento.

 funzione privata loadXML (file: String): void urlLoader = new URLLoader (new URLRequest (file)); urlLoader.addEventListener (Event.COMPLETE, parseXML); 

Passaggio 14: analizzare il file XML

I dati xml vengono assegnati all'oggetto xml e viene chiamata una funzione per caricare le immagini.

 funzione privata parseXML (e: Event): void xml = new XML (e.target.data); LoadImages (); 

Passaggio 15: caricare le immagini

Un'istruzione for viene utilizzata per ottenere il numero di immagini nel file xml, caricare le immagini utilizzando un oggetto Loader e archiviare questo Loader in un oggetto Vector, definito in precedenza. Al termine del caricamento di un'immagine, viene eseguita la funzione sortImages.

 funzione privata loadImages (): void for (var i: int = 0; i < xml.children().length(); i++)  var loader:Loader = new Loader(); loader.load(new URLRequest(xml.children()[i].@src)); imagesVector.push(loader); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, sortImages);  

Passaggio 16: ordina le immagini

Questa funzione aggiunge le immagini allo stage e le ordina; quando tutte le immagini vengono caricate, chiama le funzioni che creano il pannello delle informazioni e gli ascoltatori del mouse.

 funzione privata sortImages (e: Event): void imagesCounter ++; for (var i: int = imagesVector.length - 1; i> = 0; i--) // torna indietro ... addChild (imagesVector [i]); // ... in modo che le immagini all'inizio di XML finiscano in primo piano if (imagesCounter == imagesVector.length) // Se tutte le immagini sono caricate createInfoPanel (); timer.addEventListener (TimerEvent.TIMER, autoChange); timer.start (); addPreloader (); addActions (); 

Passaggio 17: aggiungi gli ascoltatori del mouse alle immagini

Noi usiamo a per dichiarazione per impostare gli ascoltatori del mouse su ogni immagine. Questa è una forma di controllo molto semplice; quando l'utente fa clic su un'immagine, verrà chiamata la funzione changeImage handler.

 funzione privata addActions (): void for (var i: int = 0; i < imagesVector.length; i++)//Gets the number of images  //Sets the listener, changeImage function will be executed when an image is clicked imagesVector[i].addEventListener(MouseEvent.MOUSE_UP, changeImage);  

Passaggio 18: transizione manuale

Questo codice verrà eseguito quando l'utente fa clic su un'immagine. Leggi i commenti nel codice per i dettagli.

 private function changeImage (e: MouseEvent): void timer.stop (); // Ferma il timer se (aggiunto) // Controlla se il preloader è in fase, se è vero, lo rimuove, se già rimosso, non accade nulla removeChild (preloader); aggiunto = falso;  if (! tweening) // Se una transizione non è in corso lastTarget = e.target; // Ottieni l'immagine cliccata tween = new Tween (e.target, "alpha", Strong.easeOut, 1,0,1, true); // Avvia una transizione tween.addEventListener (TweenEvent.MOTION_FINISH, changeDepth); // L'immagine cambierà la sua profondità quando la transizione viene eseguita tweening = true; // Indica che è in corso una transizione infoCounter ++; // Cambia il figlio che verrà caricato da xml if (infoCounter> = xml.children (). Length ()) // Se infoCounter è maggiore del numero totale di immagini infoCounter = 0; // Reimposta titleField.text = xml.children () [infoCounter]. @ titolo; // Applica le modifiche ai campi di testo description.text = xml.children () [infoCounter]. @ descrizione;  else titleField.text = xml.children () [infoCounter]. @ titolo; // Applica le modifiche ai campi di testo description.text = xml.children () [infoCounter]. @ descrizione; 

Passaggio 19: sposta l'immagine in secondo piano

La transizione tra le immagini è basata sull'interpolazione alpha, quindi vedrai l'immagine successiva al termine della transizione. Tuttavia, se si fa clic su di esso, si farà clic sulla stessa immagine di prima, anche se non è visibile. Questo lo risolverà.

 funzione privata changeDepth (e: TweenEvent): void // Quando l'alpha è 0 setChildIndex (lastTarget, 0); // sposta l'immagine in modo che sia dietro gli altri lastTarget.alpha = 1; // Ripristina la sua visibilità tweening = false; // Contrassegna l'interpolazione come completa

Passaggio 20: Crea pannello informativo

Questo creerà un pannello semi-trasparente, con il testo generato dai tag Title e Description dell'XML.

 funzione privata createInfoPanel (): void // Disegna un rettangolo nero con 50% alpha infoPanel.graphics.beginFill (0x000000, 0.5); infoPanel.graphics.drawRect (0, 0, 600, 50); infoPanel.graphics.endFill (); // Posiziona e imposta il valore del campo titolo titleField.text = xml.children () [infoCounter]. @ titolo; titleField.x = 5; titleField.y = 5; // Posiziona e imposta il valore del campo descrizione description.text = xml.children () [infoCounter]. @ descrizione; description.x = 7; description.y = 22; infoPanel.y = 250; // Posiziona questo pannello in fondo // Aggiungi i bambini infoPanel.addChild (titleField); infoPanel.addChild (descrizione); addChild (InfoPanel); 

Passaggio 21: gestire la transizione automatica

Questo codice gestisce la transizione automatica; è attivato dall'evento TIMER dell'oggetto Timer.

 funzione privata autoChange (e: TimerEvent): void infoCounter ++; // Cambia il child che verrà caricato da xml lastTarget = imagesVector [xml 1 = "-" 2 = "infoCounter" language = ". Children (). Length ()"] [/ xml]; // Ottiene l'ultima immagine interpolata tween = new Tween (imagesVector [xml 1 = "-" 2 = "infoCounter" language = ". Children (). Length ()"] [/ xml], "alpha", Strong .easeOut, 1,0,1, true); // Crea un'interpolazione alpha / * Le stesse azioni della transizione manuale, modifica delle informazioni ecc. * / Tween.addEventListener (TweenEvent.MOTION_FINISH, changeDepth); tweening = true; if (infoCounter> = xml.children (). length ()) infoCounter = 0; titleField.text = xml.children () [infoCounter]. @ titolo; description.text = xml.children () [infoCounter]. @ descrizione;  else titleField.text = xml.children () [infoCounter]. @ titolo; description.text = xml.children () [infoCounter]. @ descrizione; 

Passaggio 22: posizionare il Preloader MovieClip

Questo pezzo di script aggiunge e posiziona il preloader.

 funzione privata addPreloader (): void added = true; preloader.scaleX = 0,08; preloader.scaleY = 0.08; preloader.x = (600 - preloader.width / 2) - 12; preloader.y = (300 - preloader.height / 2) - 12; addChild (preloader); 

Questo completa il Imagerotator classe.

Passaggio 23: utilizzo della classe

Ci sono due modi per usare questa classe. Puoi usarlo nel tuo codice come un'istanza o come la classe del documento con i parametri predefiniti che abbiamo impostato in precedenza.

Se scegli di istanziare questa classe e usarla nel tuo codice, questo è un esempio di come usarlo:

 import ImageRotator; var ir: ImageRotator = new ImageRotator ("images.xml", 1100); addChild (ir);

In questo modo è possibile impostare il file xml da caricare e l'intervallo della transizione senza la necessità di modificare il codice di classe.

Altrimenti, vedi il prossimo passo.

Passaggio 24: utilizzo della classe documento

Nel file .fla, vai al pannello Proprietà e scrivi Imagerotator nel campo Classe. Ricorda che questo utilizzerà i parametri predefiniti.

Conclusione

Questo è solo un esempio di un rotatore di immagini e un buon modo per iniziare a creare la tua fantastica galleria di immagini.

Grazie per aver letto!