E-learn.ro Produse evoMAG.ro
Panou utilizatori
Utilizator Parola
Creeaza cont nou    Recupereaza parola
Login
Newsletter
Introdu adresa ta de email
Inscrie-te
Inchide panoul de utilizatori
Add to Google
Topul celor mai bine cotate tutoriale
Topul celor mai vizualizate tutoriale
* Cele mai bine clasate si cele mai votate tutoriale sunt selectate dintre tutorialele adaugate in ultimele 30 de zile.

Tutoriale Adobe Flash

Descarca toolbar

Toolbar E-learn.ro Facebook Twitter

GRAFICA 2D  /  Adobe Flash  /  Comunicare cu XML (3)

Album foto - foto SlideShow

12.11.2008
Album foto - foto SlideShow

In acest tutorial vom incerca sa construim doua tipuri de albume fotografice.

Total vizualizari: 5670 5670 afisari   |   Comentarii  0   |   Rating   |   (6 voturi)   |   Timp necesar: 30 min 30 min   |   Nivel de cunostiinte necesar: Mediu  Mediu

Sursa:  Thor.info.uaic.ro  
Autor:  Cosmin Varlan
Adauga la tutoriale favorit Adauga la tutoriale favorite
Pagina:
« 1 2
comenteaza printeaza

În continuare în mod continuu (deşi nu neapărat necesar) vom modifica dimensiunea chenarului pentru a fi cu două unităţi mai mare decât imaginea încărcată (valoarea -5 lasă două unităţi în stânga şi două în dreapta). Dacă dimensiunea chenarului este aproape de cea dorită începem să creştem gradul de opacitate al MovieClip-ului pentru a face vizibilă imaginea.

Testaţi exemplul apăsând de două ori CTRL+Enter (pentru a observa şi preloaderul). Acest exemplu a fost realizat pentru 7 imagini: de la 0.jpg până la 6.jpg. Ce se întâmplă dacă una din cele 7 imagini lipseşte ? Va mai funcţiona corect exemplul ? (încercaţi să răspundeţi înainte de a şterge una din imagini). Din ce motiv atunci când expiră contorul schimbăm şi MovieClip-ul în care încărcăm următoarea imagine dar nu facem acest lucru şi atunci când se produce o eroare (atunci schimbam doar imaginea ce trebuie încărcată)?

Ca exerciţiu încercaţi să realizaţi acelaşi exemplu fără a desena chenarul folosind instrumentele Flash-ului, adică creaţi acest chenar (împreună cu animaţia sa) numai folosind ActionScript.

Cel de-al doilea album fotografic va încărca o fotografie numai când se va face cererea de încărcare. Iniţial vizitatorului paginii i se va afişa o listă cu imaginile disponibile (în format thumb-nail9), încărcarea efectuându-se numai atunci când acesta va apăsa pe imaginea dorită. Fiecare imagine mică din listă se va încărca folosind un preloader dar nu pentru a afişa cât mai avem de aşteptat până la final ci pentru a şti momentul în care încărcarea este completă. Pentru a forma o listă vom ataşa fiecare imagine încărcată unui MovieClip pe care-l vom putea muta sub o mască. In acest fel vom afişa doar o porţiune din el. Lista va fi afişată deasupra locului în care se va încărca imaginea şi din acest motiv pozele din listă vor fi afişate pe orizontală.

Pentru fiecare imagine folosită trebuie să avem stocate (pe server) două imagini: una mică (imaginea ce se va încărca iniţial în listă) şi un a mare (imaginea care se va încărca atunci când imaginea mică va fi apăsată).

Numele fişierelor nu vor mai fi sub formă de numere (de fapt prima metodă era una destul de artificială), ele vor fi încărcate dintr-un fişier XML ce conţine numele tuturor imaginilor.

Fişierul XML conţine doar date structurate. Un fişier în format XML care va indica Flash-ului că are de afişat 3 imagini în format JPG va avea următoarea structură (imagini.xml):

<?xml version="1.0" ?>
<imagini>
    <img fisier="gradina.jpg" descriere="Gradina din spatele casei" data="10.02.2006" />
    <img fisier="apa_curgatoare.jpg" descriere="Bistrita iarna" data="01.02.2006" />
    <img fisier="pisica.jpg" descriere="Persana" data="15.07.2004" />
</imagini>

Fiecare imagine este identificată printr-un nouă intrare de tip img. Singura informaţie disponibilă (pentru început) pentru fiecare imagine este numele fişierului ce va fi încărcat.

Scrieţi un fişier XML cu un conţinut asemănător cu cel dat mai sus particularizat pentru imaginile pe care doriţi să le folosiţi. Denumiti acest fişier „imagini.xml”. În directorul în care este situat acest fişier veţi salva şi proiectul flash. În plus, în acelaşi director, veţi adăuga un director „foto” în care veţi pune toate imaginile ce au fost trecute în XMLul construit.

Acest exemplu va fi folosit în crearea paginii personale de web în care toate filmele Flash ce vor fi încărcate la un moment dat ar fi bine să aibă o aceeaşi dimensiune. Deoarece dimensiunea scenei pentru majoritatea aplicaţiilor realizate era de 640x480 şi pentru că vom dori să includem şi această aplicaţie în pagina noastră, dimensiunea scenei va fi setată tot la această rezoluţie. Pozele care se vor încărca nu trebuie să fie de dimensiuni foarte mari, personal în pagina web nu pun imagini cu rezoluţie mai mare de 320x240. Pentru fiecare imagine cu rezoluţia 320x240 veţi avea nevoie de incă una cu dimensiunea 96x72 (poza redimensionată). Numele imaginii mici va fi acelaşi cu numele imaginii mari dar va avea prefixul „mic_” (De exemplu, imaginea mică pentru „gradina.jpg” se va numi „mic_gradina.jpg”). Imaginile mici vor fi puse în acelaşi director cu cele mari.

Scriptul va fi aşezat în totalitate în primul cadrul al al timeline-ului. Pentru început va trebui să definim un obicet XML şi să încărcăm lista imaginilor.

Deocamdata vom vedea o eventuală problemă şi cum ar putea fi evitată: după ce vom termina de încărcat fişierul XML în Flash, îl vom procesa şi vom începe încărcarea fişierelor (mici) de pe server pentru a construi lista cu fişierele disponibile. Pentru fiecare imagine mică vom avea nevoie de câte un MovieClip nou şi pentru fiecare MovieClip nou va trebui să executăm comanda loadMovie pentru a încărca imaginea externă.

Dacă sunt puţine imagini, nu există nici o problemă dar în cazul în care avem un număr mare de imagini, acestea îşi vor începe încărcarea aproape toate simultan şi se vor „îngreuna” una pe celaltă (de fapt probabil cu toţii aţi observat că atunci când încercaţi sa copiaţi mai multe fişiere de pe o partiţie pe alta este mai avantajos să le copiaţi pe rând decât simultan). Pentru început vom scrie scriptul care va încărca toate imaginile (mici) simultan (desi gresit, el are o anumită importanţă în observarea funcţionării şi poate fi completat cu uşurinţă pentru a fi schimbat în versiunea corectă):

var imagini = new XML();
imagini.ignoreWhite = true;
imagini.onLoad = function() {
    _root.nr_max_img = _root.imagini.firstChild.childNodes.length;
    trace("numarul de poze:"+_root.nr_max_img);
    _root.createEmptyMovieClip("lista_imagini", 0);
    for (i=0; i<_root.nr_max_img; i++) {
        _root.lista_imagini.createEmptyMovieClip("img"+i, i);
        _root.lista_imagini["img"+i].loadMovie("foto/mic_"+_root.imagini.firstChild.childNodes[i].attributes.fisier);
    }
};
imagini.load("imagini.xml");

Scriptul funcţionează în felul următor: crează un obiect XML, ignoră spaţiile albe (am amintit într-un capitol anterior că acestea împiedică buna procesare a documentului XML), este creată funcţia ce se va executa în momentul încărcării XMLului (onLoad) şi se porneşte încărcarea XML-ului „imagini.xml” ce conţine lista fişierelor. Câteva comentarii asupra funcţiei onLoad: după încărcarea XML-ului memorăm numărul de poze în variabila _root.nr_max_img şi afişăm acest număr de poze prin intermediul comenzii trace (aceasta este mai mult o verificare că XMLul s-a încărcat corect). În continuare vom crea un MovieClip cu numele de instanţă „lista_imagini” în care se vor încărca pe rând imaginile desemnate de XML, fiecare în propriul MovieClip.

Astfel, pentru fiecare imagine (for-ul de fapt merge de la valoarea 0 până la numărul maxim de imagini deci vom putea prelua pe rând imaginile) vom crea câte un MovieClip nu numele de instanţă „img”+i (de fapt vom avea img0, img1, img2,....) şi fiecărei instanţe îi vom permite încărcarea prin intermediul loadMovie a imaginii asociate.

Problema care apare cu scenariul acesta este încărcarea simultană a mai multor fişiere (acest fapt este rezultatul executării foarte rapide a buclei „for”). În final, dacă în faza de test veţi selecta „Bandwith Profiler” din meniul „View” şi veţi apăsa de două ori CTRL+Enter (reamintesc că acest lucru simulează încărcarea pentru un anumit tip de bandă) veţi avea un rezultat ca în imaginea de mai jos.


Aşa cum am zis, încărcarea de acest tip constituie o problemă atunci când numărul fişierelor este mare. În acest caz, pentru a evita „aglomerarea” ar trebui să nu permitem Flash-ului să încarce altă imagine decât dacă cea anterioară a fost încărcată cu succes (sau dacă imaginea nu se găseşte pe server.

Pentru a determina momentul încărcării complete a unei imagini vom apela la un „listener” asemănător cu cel făcut în cadrul preloaderelor dar de această dată nu va avea nevoie de desenarea unei bare de progres ci doar de tratarea evenimentelor onLoadComplete şi eventual a lui onLoadError (pentru a putea trece la următoarea imagine ce trebuie încărcată dacă cea curentă nu a fost găsită pe server).

În scriptul ce va încarca imaginile prin intermediul listenerului trebuie să avem grijă ca dacă imaginea nu este găsită pe server (sau apare o eroare de încărcare) să nu creăm un nou MovieClip pentru încărcarea imaginii următoare (de fapt o altă soluţie ar putea fi ca în tratarea evenimentului onLoadError să distrugem MovieClip-up ce a cauzat eroarea). Din acest motiv vom folosi două contoare, unul pentru a reţine la al câtelea MovieClip am ajuns (variabila i) şi al doilea pentru a şi care este imaginea ce va fi încărcată (variabila j).

Un alt aspect este modul în care încărcăm imaginile. În cadrul funcţiei _root.OnEnterFrame vom testa în mod continuu dacă putem încărca o următoare imagine (prin testarea unei variabile care va avea valoarea false pe durata încărcării unei imagini) şi numai în cazul în care aceasta este adevărată (se va face true doar la apariţia evenimentului onLoadComplete) înseamnă că momentan nu se încarcă nimic şi vom putea încărca următoarea imagine.

Scriptul este următorul:

var imagini = new XML();
imagini.ignoreWhite = true;
imagini.onLoad = function() {
    
    // cream un listener:
    var un_obiect:Object = new Object();
    un_obiect.onLoadComplete = function():Void {
        _root.lista_imagini["img"+mc_curent].nr_imagine = img_curent;
        _root.poti_incarca_urmatoarea = true;
    };
    un_obiect.onLoadError = function(destinatie:MovieClip, httpStatus:Number):Void {
        _root.poti_incarca_urmatoarea = true;
        _root.eroare_de_incarcare = true;
    };
    var monitor:MovieClipLoader = new MovieClipLoader();
    monitor.addListener(un_obiect);
    
    // am terminat de creat listenerul
    _root.nr_max_img = _root.imagini.firstChild.childNodes.length;
    trace("numarul de poze:"+_root.nr_max_img);
    _root.createEmptyMovieClip("lista_imagini", 0);
    _root.poti_incarca_urmatoarea = true;
    _root.eroare_de_incarcare = false;
    
    i = 0;
    j = 0;
    _root.onEnterFrame = function() {
        if ((_root.poti_incarca_urmatoarea) && (j<_root.nr_max_img)) {
            _root.poti_incarca_urmatoarea = false;
            if (!_root.eroare_de_incarcare) {
                _root.lista_imagini.createEmptyMovieClip("img"+i, i);
            } else {
                i--;
                _root.eroare_de_incarcare = false;
            }
            _root.lista_imagini["img"+i]._x = i*100;
            _root.mc_curent = i;
            _root.img_curent = j;
            monitor.loadClip("foto/mic_"+_root.imagini.firstChild.childNodes[j].attributes.fisier,_root.lista_imagini["img"+i]);
            i++;
            j++;
        }
        
        if ((j==_root.nr_max_img) && (_root.poti_incarca_urmatoarea)){
            nr_total_mc = i;
            for (i=0; i<nr_total_mc; i++) {
                _root.lista_imagini["img"+i].onPress = function() {
                    incarca_imagine_mare("foto/"+_root.imagini.firstChild.childNodes[this.nr_imagine].attributes.fisier);
                };
            }
            _root.onEnterFrame = null;
        }
    };
};
imagini.load("imagini.xml");
Pagina:
« 1 2
comenteaza printeaza
Alte tutoriale Adobe Flash:
Noteaza acest tutorial
Rating tutorial
 
(6 voturi)
Pentru a nota acest tutorial, trebuie sa fii logat!
Posteaza un comentariu
Pentru a posta un comentariu, trebuie sa fii logat!
0 TOP UTILIZATORI* 0 0
Tutoriale scrise de kheops
kheops Rang utilizator kheops - Incepator
2777
Tutoriale scrise de adry.ro
adry.ro Rang utilizator adry.ro - Incepator
794
Tutoriale scrise de pustiu
pustiu Rang utilizator pustiu - Expert
608
Tutoriale scrise de tornaddoss
tornaddoss Rang utilizator tornaddoss - Incepator
584
Tutoriale scrise de angel140581
angel140581 Rang utilizator angel140581 - Incepator
335
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
aparate foto
AJAX MySQL XHTML Outlook Powerpoint Ruby on Rails COREL DRAW Java Word Flash PSD Fotografie CSS StyleSheet SWF Excel Fireworks Verilog Sony Vegas Swift 3D Python Vista Action Script Gimp Dreamweaver Photoshop XML Bridge HTML SEO JSON PHP Javascript Lightroom Illustrator RoR
Promovare:
Daca faci parte din comunitatea E-learn.ro si doresti promovarea acesteia, poti accesa pagina de promovare.
Arhiva newsletter:
Daca ai ratat un numar mai vechi, sau vrei sa revezi care au fost noutatile E-learn.ro la un moment dat, poti accesa arhiva de newslettere.
  Copyright © 2008-2012 E-LEARN.ro. Toate drepturile rezervate. Termeni si conditii.
Conceput si realizat de Neokinetics Software
Submit Your Site SmartNetBook.ro