Creare una Galleria Shuffle in Flash usando XML e ActionScript 3.0

In questo tutorial spiegherò come accedere e utilizzare l'Elenco di visualizzazione durante la creazione di una galleria di immagini basate su XML con ActionScript 3.0.




Passaggio 1: panoramica

Usando XML caricheremo dinamicamente e otterremo informazioni sulle immagini, forniremo loro una posizione centrale casuale, aggiungere una cornice, aggiungere funzionalità di trascinamento e, infine, utilizzeremo un'interpolazione per gestire l'animazione dello zoom.

Passaggio 2: iniziamo

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

Imposta le dimensioni dello stage su 600x350 e aggiungi un gradiente radiale grigio (#EEEEEE, #DDDDDD).

Passaggio 3: aggiunta di un preloader

Aggiungeremo un'animazione di precaricamento per informare l'utente quando il contenuto viene caricato. In questo caso ho usato il preloader ispirato ad Apple che abbiamo creato prima. Poiché utilizzeremo solo l'animazione, non è necessario importare la classe o utilizzare un identificatore di esportazione.

Posiziona il preloader sul palco e centralo.

Passaggio 4: incorporamento di un carattere

Incorporeremo un carattere, un'attività estremamente semplice quando si aggiunge un campo di testo allo stage nell'IDE di Flash, ma un po 'diverso con ActionScript.

Aprire il pannello Libreria e fare clic con il pulsante destro del mouse nell'area degli elementi senza selezionarne uno, verrà visualizzato un menu contestuale.

Fare clic su "Nuovo carattere" per aprire una finestra di dialogo, dare un nome al carattere e selezionare quello che si desidera utilizzare come mostrato nell'immagine seguente.

Questo creerà una classe del font che hai selezionato, verrà creata un'istanza al passaggio 9.

Passaggio 5: XML

Creiamo il file XML.

Apri il tuo editor XML o di testo preferito e scrivi:

        

Quando hai finito, salvalo come "images.xml" nella tua cartella xml.

Passaggio 6: ActionScript

Il codice che useremo verrà scritto in una singola classe che verrà utilizzata come Document Class nel file FLA.

Creare un nuovo file ActionScript (File> Nuovo)

Salvalo come "Main.as".

Passaggio 7: pacchetto

Inizieremo con:

 classi di pacchetti 

Il pacchetto parola chiave ti consente di organizzare il tuo codice in gruppi che possono essere importati da altri script, si consiglia di nominarli partendo da una lettera minuscola e utilizzare gli intercapori per le parole successive, ad esempio: galleryClasses.

Se non vuoi raggruppare i tuoi file in un pacchetto o hai solo una classe, puoi usarla direttamente dalla tua cartella di origine, ma l'idea deve essere organizzata.

Passaggio 8: Classi obbligatorie

 import flash.display.Sprite; import flash.display.MovieClip; import flash.net.URLLoader; import flash.net.URLRequest; import flash.display.Loader; import flash.events.Event; import flash.filters.BitmapFilter; import flash.filters.DropShadowFilter; import flash.text.TextFormat; import flash.text.TextField; import flash.text.AntiAliasType; import flash.events.MouseEvent; importare fl.transitions.Tween; importare fl.transitions.easing.Strong; importare fl.transitions.TweenEvent;

Queste sono le classi di cui avremo bisogno per realizzare questa galleria. Se hai bisogno di aiuto con una classe specifica, usa la Guida di Flash (F1).

Passaggio 9: estensione della classe

 la classe pubblica Main estende MovieClip 

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.

Useremo metodi e proprietà specifici di MovieClip per estendere l'utilizzo della classe MovieClip.

Passaggio 10: variabili

 var xml: XML; // L'oggetto XML che analizzerà il file XML var images: Array = new Array (); // Questo array memorizzerà le immagini caricate var imagesLoaded: int = 0; // Un contatore, conta le immagini caricate var imagesTitle: Array = new Array (); // Le proprietà del titolo del file XML interpolazione: Tween; // Gestisce l'animazione var ingrandita: Boolean = false; // Controlla se un'immagine è ingrandita, false di default var canClick: Boolean = true; // Controlla se l'utente può fare clic su un'immagine per ingrandirla, true per default var lastX: int; // Memorizza la proprietà x dell'ultima immagine che è stata cliccata var lastY: int; // Memorizza la proprietà y dell'ultima immagine su cui è stato fatto clic var textformat: TextFormat = new TextFormat (); // Una schermata var di TextFormat Object: Sprite = new Sprite (); // Una schermata nera per mettere a fuoco il formato var dell'immagine attivaFont: Avenir = new Avenir (); // Questo è il carattere incorporato

Passaggio 11: costruttore

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 quando si utilizza la Document Class.

In questa funzione imposteremo le proprietà dell'oggetto TextFormat che useremo per visualizzare un titolo o una descrizione di ogni immagine. Crea la schermata nera che appare quando l'utente fa clic su un'immagine e chiama la funzione che carica il file XML desiderato.

 public function Main (): void textformat.color = 0xFFFFFF; textformat.font = formatFont.fontName; textformat.size = 17; // Usa le stesse dimensioni che hai usato quando hai incorporato il font dalla libreria screen.graphics.beginFill (0x111111, .75); screen.graphics.drawRect (0, 0, stage.stageWidth, stage.stageHeight); screen.graphics.endFill (); loadXML ( "xml / images.xml"); 

Passaggio 12: Funzione Caricatore XML

Questa funzione carica il file XML fornito dal parametro "file". Aggiungiamo anche un listener da gestire quando il carico è completo.

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

Passaggio 13: analisi XML

Qui convertiamo il file XML caricato in un oggetto XML valido utilizzando il parametro "data" di URLLoader. Quindi usiamo un'istruzione "for" per creare un Loader per ogni immagine nell'XML. Ulteriori informazioni sono disponibili nel commento.

 funzione privata handleXML (e: Event): void xml = new XML (e.target.data); per (var i: int = 0; i < xml.children().length(); i++)  var loader:Loader = new Loader(); loader.load(new URLRequest(String(xml.children()[i].@src))); images.push(loader); //Adds the Loaders to the images Array to gain access to them outside this function imagesTitle.push(xml.children()[i].@title); //Adds the title attribute content to the array to use it outside this function loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded); //A listener to the function that will be executed when an image is loaded  

Passaggio 14: immagini caricate

Quando un Caricatore ha caricato un'immagine dall'XML, viene eseguito il seguente codice:

 funzione privata caricata (e: Event): void imagesLoaded ++; // Aggiunge uno alla variabile imagesLoaded if (xml.children (). Length () == imagesLoaded) // Quando tutte le immagini vengono caricate ... removeChild (preloader); // Rimuove il Preloader MovieClip prepareImages (); // Questa funzione è spiegata nel prossimo passaggio

Passaggio 15: preparare le immagini

Questa funzione aggiungerà il frame, il TextField per visualizzare il titolo o la descrizione, lo sfondo nero usato per quello e un filtro ombra. Prendiamolo in parti.

 funzione privata prepareImages (): void for (var i: int = 0; i < images.length; i++) //These actions will be applied to all the images loaded so we use a "for" and the "images" array to do that  var container:Sprite = new Sprite(); //A container that will store the image, frame, TextField, TextField background and shadow var frame:Sprite = new Sprite(); //The Frame Sprite var infoArea:Sprite = new Sprite(); //The TextField background var infoField:TextField = new TextField(); //The TextField

Step 16: Cornice immagine

Questo crea una cornice bianca attorno all'immagine.

 frame.graphics.beginFill (0xFFFFFF); frame.graphics.drawRect (-20, -20, images [i] .width + 40, images [i] .height + 80); frame.graphics.endFill ();

Il rettangolo verrà posizionato sotto l'immagine da utilizzare come cornice.

Passo 17: Informazioni sullo sfondo

Questo crea un rettangolo nero nella parte inferiore dell'immagine, dove sarà il campo di testo.

 infoArea.graphics.beginFill (0x111111, 0,75); infoArea.graphics.drawRect (0, 0, images [i] .width, 60); infoArea.graphics.endFill (); infoArea.y = images [i] .height - 60;

Passaggio 18: Informazioni sull'immagine

Il codice seguente imposta le proprietà TextField e ne aggiunge il contenuto.

 infoField.defaultTextFormat = textformat; infoField.embedFonts = true; // Devi aggiungere questo per usare il carattere incorporato infoField.antiAliasType = AntiAliasType.ADVANCED; // Questa proprietà mostrerà il testo più chiaramente infoField.width = images [i] .width - 5; infoField.height = 20; infoField.text = imagesTitle [i]; // Il contenuto, ottenuto dall'XML e archiviato nell'array

Passaggio 19: ridimensionamento delle immagini

Qui impostiamo la scala desiderata delle immagini. Poiché tutto sarà all'interno di Container Sprite, è necessario ridimensionarlo.

 container.scaleX = 0,3; container.scaleY = 0.3;

Step 20: Posizione

Le immagini avranno una posizione casuale basata sul centro dell'area dello stage. Usiamo la matematica per questo.

 container.x = stage.stageWidth / 4 + Math.floor (Math.random () * (stage.stageWidth / 4)); container.y = stage.stageHeight / 5 + Math.floor (Math.random () * (stage.stageHeight / 5));

Step 21: Shadow Filter

Questo creerà un filtro ombra.

 var shadowFilter: BitmapFilter = new DropShadowFilter (3, 90, 0x252525, 1, 2, 1, 15); // Distanza, angolo, colore, alfa, sfocatura, intensità, qualità var filterArray: Array = [shadowFilter]; container.filters = filterArray; // Applica il filtro

Passaggio 22: aggiunta allo stage

È ora di aggiungere i bambini, l'ordine in cui li aggiungiamo è l'ordine in cui verranno inseriti nell'elenco di visualizzazione, quindi assicurati di aggiungerli in questo modo.

 infoArea.addChild (infoField); // Aggiunge il campo di testo allo sfondo del campo di testo container.addChild (frame); // Aggiunge il Frame al Container container.addChild (images [i]); // Aggiunge l'immagine nella parte superiore del frame nel contenitore infoArea.visible = false; // Impostiamo le informazioni sull'immagine come invisibili per default container.addChild (infoArea); // Aggiunge l'area informazioni in cima a tutto

Passaggio 23: ascoltatori

Sebbene potessimo aggiungere gli Listener ad ogni Sprite in precedenza, li aggiungerò ora che si trovano all'interno del contenitore per mostrarti come funziona l'Elenco di visualizzazione.

 container.getChildAt (1) .addEventListener (MouseEvent.MOUSE_UP, zoomHandler); // Questa è l'immagine caricata dall'XML, questo è l'oggetto Loader container.getChildAt (0) .addEventListener (MouseEvent.MOUSE_DOWN, dragImage); // Questo è il frame container.getChildAt (0) .addEventListener (MouseEvent.MOUSE_UP, stopDragImage); // Frame addChild (container); // Infine, aggiungiamo il contenitore allo stage

Passaggio 24: funzioni di trascinamento

Nel passaggio precedente abbiamo aggiunto due listener al Frame delle immagini. Queste funzioni si prenderanno cura del trascinamento.

Usiamo "parent" perché vogliamo trascinare tutti gli oggetti, poiché il "target" è il Frame Sprite, l'oggetto genitore è il Container.

 private function dragImage (e: MouseEvent): void e.target.parent.startDrag ();  private function stopDragImage (e: MouseEvent): void e.target.parent.stopDrag (); 

Passaggio 25: Zoom

Questa funzione è responsabile dello zoom avanti e indietro. Il suo listener si trova nell'immagine reale, quindi facendo clic su Frame non si chiamerà questa funzione.

Nota dell'editore: Per qualche ragione, il altrimenti se () la dichiarazione all'interno di questa funzione zoomHandler stava facendo il nostro crash di evidenziatore della sintassi. Poiché non vuole essere visualizzato sulla pagina, ho reso disponibile la funzione per il download. Ci scusiamo per l'inconveniente, Ian.

Passaggio 26: Motion Finish

Alcune azioni devono essere eseguite quando le Tween sono finite, queste sono quelle azioni.

 funzione privata zoomInFinished (e: TweenEvent): void zoomed = true; // Modifica le variabili in base all'evento canClick = true; tween.obj.getChildAt (2) .visible = true; // Imposta l'area Informazioni su visibile funzione privata zoomOutFinished (e: TweenEvent): void zoomed = false; removeChild (schermo); // Rimuove la schermata nera tween.obj.getChildAt (0) .addEventListener (MouseEvent.MOUSE_DOWN, dragImage); // Aggiunge il listener di trascinamento a Frame Sprite

Passaggio 27: Classe documento

Torna al FLA e aggiungi Principale come la Document Class nel pannello delle proprietà. Se salvi la tua classe in un pacchetto devi aggiungere anche il nome del pacchetto, qualcosa del tipo: yourpackage.Main

Metti alla prova il tuo file e guarda la tua galleria di lavoro!

Conclusione

Come sempre, prova diverse cose nel tuo codice per creare la galleria come desideri.

Spero che ti sia piaciuto questo tutorial, grazie per la lettura!