Creați o galerie de shuffle în Flash utilizând XML și ActionScript 3.0

În acest tutorial vă voi explica cum să accesați și să utilizați Lista de Afișare în timp ce creați o galerie de imagini bazată pe XML cu ActionScript 3.0.




Pasul 1: Prezentare generală

Folosind XML, vom încărca dinamic și vom obține informații despre imagini, le vom da o poziție centrală aleatorie, vom adăuga un cadru, vom adăuga funcții de tragere și, în fine, vom folosi un tween pentru a gestiona animația zoom.

Pasul 2: Să începem

Deschideți Flash și creați un fișier Flash nou (ActionScript 3).

Setați dimensiunea scenei la 600x350 și adăugați un gradient radial gri (#EEEEEE, #DDDDDD).

Pasul 3: Adăugarea unui preloader

Vom adăuga o animație de preîncărcare pentru a spune utilizatorului când se încarcă conținutul. În acest caz, am folosit preloaderul inspirat de Apple pe care l-am creat înainte. Deoarece vom folosi doar animația, nu este nevoie să importați clasa sau să folosiți un identificator de export.

Plasați preloaderul pe scenă și centrați-l.

Pasul 4: Încărcarea unui font

Vom încorpora un font, o sarcină foarte ușoară atunci când adăugăm un TextField pe scenă în IDE-ul Flash, dar puțin diferit folosind ActionScript.

Deschideți panoul Bibliotecă și faceți clic dreapta în zona de elemente fără a selecta unul, va apărea un meniu contextual.

Faceți clic pe "Font nou" pentru a deschide o fereastră de dialog, pentru a da un nume fontului dvs. și a le selecta pe cel pe care doriți să-l utilizați, după cum se arată în imaginea următoare.

Aceasta va crea o clasă a fontului pe care l-ați selectat, vom instanțializa acest lucru în pasul 9.

Pasul 5: XML

Să creăm fișierul XML.

Deschideți editorul preferat XML sau Text și scrieți:

        

Când ați terminat, salvați-l ca "images.xml" în folderul xml.

Pasul 6: ActionScript

Codul pe care îl vom folosi va fi scris într-o singură clasă care va fi utilizată ca clasă de documente în fișierul FLA.

Creați un nou fișier ActionScript (Fișier> Nou)

Salvați-l ca "Main.as".

Pasul 7: Pachetul

Vom începe cu:

 clase de pachete 

pachet cuvântul cheie vă permite să vă organizați codul în grupuri care pot fi importate de alte scripturi, este recomandat să le denumiți începând cu o literă mică și să utilizați intercaps pentru următoarele cuvinte, de exemplu: galleryClasses.

Dacă nu doriți să vă grupați fișierele într-un pachet sau dacă aveți doar o singură clasă, o puteți folosi direct din folderul sursă, dar ideea trebuie organizată.

Pasul 8: Clasele necesare

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

Acestea sunt clasele de care avem nevoie pentru a face această galerie. Dacă aveți nevoie de ajutor cu o anumită clasă, vă rugăm să folosiți Ajutorul Flash (F1).

Pasul 9: Extinderea clasei

 clasa publică principală extinde MovieClip 

extinde cuvântul cheie definește o clasă care este o subclasă a unei alte clase. Subclasa moștenește toate metodele, proprietățile și funcțiile, astfel încât le putem folosi în clasa noastră.

Vom folosi metode și proprietăți specifice MovieClip, astfel încât să le extindem folosind clasa MovieClip.

Pasul 10: Variabile

 var xml: XML; // Obiectul XML care va analiza fișierul XML var: Array = new Array (); // Această matrice va stoca imaginile încărcate var imagesLoaded: int = 0; // Un contor, numără imaginile încărcate var imagesTitle: Array = Array nou (); // Proprietățile titlului fișierului XML var tween: Tween; // se ocupă de animația var zoom: Boolean = false; // Verifică dacă o imagine este mărită, false în mod prestabilit var canClick: Boolean = true; // Verifică dacă utilizatorul poate face clic pe o imagine pentru ao mări, adevărat în mod implicit var lastX: int; // Stochează proprietatea x a ultimei imagini pe care a fost dată clic pe var lastY: int; // Stochează proprietatea y a ultimei imagini pe care a fost făcut clic pe textformat var: TextFormat = new TextFormat (); // Un obiect TextFormat Object var: Sprite = Sprite nou (); // Un ecran negru pentru a se concentra asupra imaginii active var formatFont: Avenir = nou Avenir (); // Acesta este fontul încorporat

Pasul 11: Constructorul

Constructorul este o funcție care rulează atunci când un obiect este creat dintr-o clasă. Acest cod este primul care se execută când faceți o instanță a unui obiect sau când utilizați Clasa de documente.

În această funcție vom seta proprietățile obiectului TextFormat pe care îl vom folosi pentru a afișa un titlu sau o descriere a fiecărei imagini. Creați ecranul negru care apare atunci când utilizatorul face clic pe o imagine și apelează funcția care încarcă fișierul XML dorit.

 funcția publică principală (): void textformat.color = 0xFFFFFF; textformat.font = formatFont.fontName; textformat.size = 17; // Utilizați aceeași mărime pe care ați folosit-o la încorporarea fontului din ecranul Library.graphics.beginFill (0x111111, .75); screen.graphics.drawRect (0, 0, stadiu.staj Lățime, stadiu.staj înălțime); screen.graphics.endFill (); loadXML ( "xml / images.xml"); 

Pasul 12: Funcția Loader XML

Această funcție încarcă fișierul XML furnizat de parametrul "fișier". De asemenea, adăugăm un ascultător care să se ocupe de încărcarea completă.

 funcția privată loadXML (fișier: String): void var urlLoader: URLLoader = nou URLLoader (); var urlReq: URLRequest = noua adresă URLRequest (fișier); urlLoader.load (urlReq); urlLoader.addEventListener (Event.COMPLETE, handleXML); 

Pasul 13: Parse XML

Aici convertim fișierul XML încărcat într-un obiect XML valid utilizând parametrul "data" al URLLoader. Apoi vom folosi o instrucțiune "pentru" pentru a crea un Loader pentru fiecare imagine din XML. Informații suplimentare se găsesc în comentariu.

 funcția privată handleXML (e: Eveniment): void xml = nou XML (e.target.data); pentru (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  

Pasul 14: Imaginile încărcate

Când un încărcător a încărcat o imagine din XML, se execută următorul cod:

 funcția privată încărcată (e: Event): void imagesLoaded ++; // adaugă unul la variabila imagineLoaded dacă (xml.children (). Length () == imagesLoaded) // Când toate imaginile sunt încărcate ... removeChild (preloader); // Elimină preincarcatorul MovieClip prepareImages (); // Această funcție este explicată în pasul următor

Pasul 15: Pregătiți imaginile

Această funcție va adăuga cadrul, TextField pentru a afișa titlul sau descrierea, fundalul negru utilizat pentru acesta și Filtrul umbrelor. Să o luăm în parte.

 funcția privată prepareImages (): void pentru (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

Pasul 16: Imagine

Acest lucru creează un cadru alb în jurul imaginii.

 frame.graphics.beginFill (0xFFFFFF); frame.graphics.drawRect (-20, -20, imagini [i]. lățime + 40, imagini [i] .height + 80); frame.graphics.endFill ();

Dreptunghiul va fi poziționat sub imagine pentru a fi utilizat ca cadru.

Pasul 17: Informații de fundal

Acest lucru creează un dreptunghi negru în partea de jos a imaginii, unde va fi TextField.

 infoArea.graphics.beginFill (0x111111, 0,75); infoArea.graphics.drawRect (0, 0, imagini [i]. lățime, 60); infoArea.graphics.endFill (); infoArea.y = imagini [i] .height - 60;

Pasul 18: Informații despre imagine

Următorul cod stabilește proprietățile TextField și adaugă conținutul acestuia.

 infoField.defaultTextFormat = textformat; infoField.embedFonts = true; // Trebuie să adăugați acest lucru pentru a utiliza fontul încorporat infoField.antiAliasType = AntiAliasType.ADVANCED; // Această proprietate va afișa mai clar textul infoField.width = images [i] .width - 5; infoField.height = 20; infoField.text = imagesTitle [i]; // Conținutul, obținut din XML și stocat în Array

Pasul 19: Redimensionarea imaginilor

Aici setăm scara dorită a imaginilor. Deoarece totul va fi în interiorul containerului Sprite, trebuie doar să îl redimensionăm.

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

Pasul 20: Poziția

Imaginile vor avea o poziție aleatorie bazată pe centrul zonei Stage. Folosim matematica pentru asta.

 container.x = stadiu.clasă Lățime / 4 + Math.floor (Math.random () * (stage.stageWidth / 4)); container.y = stadiu.clasăHeight / 5 + Math.floor (Math.random () * (stage.stageHeight / 5));

Pasul 21: Filtrul umbrelor

Acest lucru va crea un filtru de umbra.

 var shadowFilter: BitmapFilter = noul DropShadowFilter (3, 90, 0x252525, 1, 2, 2, 1, 15); // Distanța, unghiul, culoarea, alfa, neclaritatea, puterea, calitatea var filterArray: Array = [shadowFilter]; container.filters = filterArray; // Aplicați filtrul

Pasul 22: Adăugarea în scenă

Este timpul să adăugăm Copiii, ordinea în care le adăugăm este ordinea pe care o vor lua în Lista de Afișare, așa că adăugați-le în acest fel.

 infoArea.addChild (infoField); // adaugă TextField la containerul BackgroundForm TextField container.addChild (cadru); // Adaugă cadrul în containerul container.addChild (imagini [i]); // adaugă imaginea deasupra cadrului în containerul infoArea.visible = false; // Am setat informațiile despre imagine la container invizibil implicit container.addChild (infoArea); // Adaugă zona de informații în partea de sus a tot

Pasul 23: Ascultători

Deși am putea adăuga ascultătorii la fiecare Sprite înainte, le voi adăuga acum că sunt în interiorul Containerului pentru a vă arăta cum funcționează Lista de Afișare.

 container.getChildAt (1) .addEventListener (MouseEvent.MOUSE_UP, zoomHandler); // Aceasta este imaginea încărcată de XML, acesta este obiectul Loader container.getChildAt (0) .addEventListener (MouseEvent.MOUSE_DOWN, dragImage); // Acesta este containerul container.getChildAt (0) .addEventListener (MouseEvent.MOUSE_UP, stopDragImage); // Cadru addChild (container); // În cele din urmă, adăugăm containerul în scenă

Pasul 24: Trageți funcțiile

În pasul anterior, am adăugat doi ascultători la Cadrul imaginilor. Aceste funcții vor avea grijă de tragere.

Folosim "părinte", deoarece dorim să tragem toate obiectele, deoarece "țintă" este Frame Sprite, obiectul parent este Container.

 funcția privată dragImage (e: MouseEvent): void e.target.parent.startDrag ();  funcția privată stopDragImage (e: MouseEvent): void e.target.parent.stopDrag (); 

Pasul 25: măriți

Această funcție este responsabilă pentru mărirea și micșorarea imaginii. Listenerul său se află în imaginea reală, astfel încât făcând clic în cadru nu va apela această funcție.

Nota editorului: Din anumite motive, altfel dacă () instrucțiunea în cadrul acestei funcții zoomHandler a făcut ca accidentele noastre de marcare a sintaxelor să se fi produs. Deoarece nu vrea să apară pe pagină, am pus la dispoziție funcția disponibilă pentru descărcare. Îmi pare rău pentru orice neplăcere, Ian.

Pasul 26: Finalizarea mișcării

Unele acțiuni trebuie executate atunci când Tweens-ul este terminat, acestea sunt acele acțiuni.

 funcția privată zoomInFinished (e: TweenEvent): void zoomed = true; // Modificați variabilele în funcție de evenimentul canClick = true; tween.obj.getChildAt (2) .visible = adevărat; // Setează zona Informații la funcția privată vizibilă zoomOutFinished (e: TweenEvent): void zoomed = false; removeChild (ecran); // Elimină ecranul negru tween.obj.getChildAt (0) .addEventListener (MouseEvent.MOUSE_DOWN, dragImage); // adaugă ascultătorul de tragere înapoi la Frame Sprite

Pasul 27: Clasa de documente

Du-te înapoi la FLA și adăugați Principal ca clasă de documente în panoul Proprietăți. Dacă salvați clasa într-un pachet, trebuie să adăugați și numele pachetului, cum ar fi: yourpackage.Main

Testați-vă fișierul și vedeți cum funcționează galeria dvs.!

Concluzie

Ca întotdeauna, încercați diferite lucruri în codul dvs. pentru a face galerie exact așa cum doriți.

Sper că ți-a plăcut acest tut, mulțumesc pentru lectură!

Cod