Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

Preloader con Flash CS3

This is a discussion on Preloader con Flash CS3 within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Come tutti ben sappiamo, una cosa molto importante è far sapere all' utente che l' SWF della nostra applicazione è ...


Go Back   Forum Flash CS3 Flash CS4 > Flash CS3 e Actionscript 3.0 > Articoli e tutorials

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  2 links from elsewhere to this Post. Click to view. #1 (permalink)  
Old 19-09-07, 17:21
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Preloader con Flash CS3


Come tutti ben sappiamo, una cosa molto importante è far sapere all' utente che l' SWF della nostra applicazione è in fase di caricamento. Soprattutto per SWF di un certo peso sarebbe meglio far conoscere all' utente anche le percentuali/tempistiche della fase di caricamento.

Con questo tutorial vorrei riuscire a spiegare al meglio ( soprattutto a chi Actionscript fatica a digerirlo ) come creare un buon preloader.

Rimane però fondamentale l' uso e la conoscenza di un livello discreto di Actionscript 3.0 .



Questo articolo è una versione aggiornata dell' articolo del 9 Maggio 2007 che potete visionare quì: caricare un SWF esterno con Flash CS3.


Vedi anche:
Preloader per principianti
Preloader della timeline


Proseguo col tutorial...



Con Actionscript 2.0 si potevano monitorare i bytes caricati utilizzando i metodi getBytesLoaded e getBytesTotal della Classe MovieClip. In quel caso si potevano utilizzare i metodi citati sulla Timeline (che non è altro che un' istanza della classe MovieClip) per monitorare il nostro SWF in fase di caricamento da parte dell' utenza.



Con Actionscript 3.0 i due metodi sono stati spostati dalla Classe MovieClip alla classe URLLoader per cui se provassimo ad utilizzare i metodi sulla Timeline, Flash avviserebbe con un errore. Quindi diciamo subito che attualmente un ottimo metodo per un preloader è utilizzare un classe personalizzata che lavora con le classi Loader e URLLoader.



Supponiamo di aver creato il nostro SWF principale e che quindi è pronto per essere pubblicato sul server. Supponiamo inolte che l' SWF si chiami ' index.swf ' . Ci serve un altro SWF che chiameremo 'preloader' che carica appunto index.SWF, ne monitorizza i bytes caricati e visualizza all' utente le percentuali.


Creazione preloader.fla:

- creo un FLA che salvo con nome ' preloader.fla ' nella stessa cartella di index.swf .

- all' interno del FLA creo le grafiche per un semplice preloader e le converto in MovieClip con nome ' mc_preloader '



- trascino mc_preloader dalla libreria allo stage e gli assegno nome istanza: ' preloader_mc '.

- clicco col destro su mc_preloader che si trova in libreria e si apre un menù, seleziono proprietà e si apre una finestra.

- attivo l' opzione ' esporta per actionscript' e nel campo ' Class ' ( nella versione Flash in italiano credo che sia Classe ) scrivo: ' Preloader ' . In questo modo assegno una Classe che si chiama ' Preloader ' ( che sto per andare a scrivere ) a preloader_mc che abbiamo sullo stage.


Creazione della classe Preloader:

- creo un file AS che salvo con nome ' Preloader.as ' così strutturato:
Code:
package
{
	import flash.display.MovieClip;
	import flash.text.TextField;
	import flash.events.Event;
	
	public class Preloader extends MovieClip
	{
		public function Preloader()
		{
			visible=false;
		}
		
		public function run():void
		{
			stage.frameRate=31;
			visible=true;
			x=stage.stageWidth/2-100;
			y=stage.stageHeight/2-this.height/2;
			addEventListener(Event.ENTER_FRAME,go);
		}
		
		private function go(e:Event):void
		{
			lines_0_mc.x--;
			lines_1_mc.x--;
			if(lines_0_mc.x<=-lines_0_mc.width)
				lines_0_mc.x=lines_1_mc.x+lines_1_mc.width-3;
			if(lines_1_mc.x<=-lines_1_mc.width)
				lines_1_mc.x=lines_0_mc.x+lines_0_mc.width-3;
		}
		
		public function stopRun():void
		{
			this.removeEventListener(Event.ENTER_FRAME,go);
			this.addEventListener(Event.ENTER_FRAME,scaleDown);
		}
		
		private function scaleDown(e:Event):void
		{
			e.target.alpha-=.05;
			if(e.target.alpha<=0)
			{
				e.target.alpha=0;
				e.target.removeEventListener(Event.ENTER_FRAME,scaleDown);
				visible=false;
			}
		}
		
		public function mostraProgresso(n:Number):void
		{
			progress_txt.text=n.toString()+' %';
		}
	}
}
Creazione della classe Loading:

- creo un file AS che salvo con nome ' Loading.as ' così strutturato:
Code:
package 
{
	import flash.display.MovieClip;
	import flash.display.Loader;
	import flash.events.*;
	import flash.net.URLRequest;

	public class Loading extends MovieClip 
	{
		private var url:String;
		private var loader:Loader;

		public function Loading() 
		{
			init();
		}
		
		private function init():void 
		{
			url='index.swf';
			var request:URLRequest=new URLRequest(url);
			loader=new Loader();
			initListeners(loader.contentLoaderInfo);
			loader.load(request);
		}
		
		private function initListeners(dispatcher:IEventDispatcher):void 
		{
			dispatcher.addEventListener(Event.OPEN,inizia);
			dispatcher.addEventListener(ProgressEvent.PROGRESS,inCaricamento);
			dispatcher.addEventListener(Event.COMPLETE,completato);
		}
		
		private function inizia(event:Event):void 
		{
			preloader_mc.run();
		}
		
		private function inCaricamento(event:ProgressEvent):void 
		{
			var percentuale:uint=(event.bytesLoaded/event.bytesTotal)*100;
			preloader_mc.mostraProgresso(percentuale);
		}
		
		private function completato(event:Event):void 
		{
			preloader_mc.stopRun();
			addChild(loader);
		}
	}
}
Ora torno su preloader.fla e nel pannello proprietà assegno la Document Class scrivendo Loading .



Analizziamo le classi e il codice Actionscript:

quando l' SWF viene lanciato, dato che la Document Class è Loading.as, Flash eseguirà prima il codice implementato in tale classe.

Quindi viene caricato l' SWF con la classe Loader e durante gli eventi di

- inizio caricamento:
private function inizia(event:Event):void
- durante il caricamento:
private function inCaricamento(event:ProgressEvent):void
-e alla fine del caricamento:
private function completato(event:Event):void



possiamo dire a Flash di eseguire del codice.

Il codice da eseguire non è altro che chiamare i metodi della classe Preloader.as che abbiamo costruito:

quando inizia il caricamento chiamiamo il metodo run di preloader

preloader_mc.run();
durante il caricamento chiamiamo il metodo mostraProgresso di Preloader passandogli un valore numerico che è dato dal rislultato della divisione tra i bytes caricati e quelli totali moltiplicato per 100

var percentuale:uint=(event.bytesLoaded/event.bytesTotal)*100;
preloader_mc.mostraProgresso(percentuale);

quando il caricamento è finito (quindi index.swf è stato completamente caricato da preloader.swf) :

preloader_mc.stopRun();
e aggiungiamo index.swf, che adesso è una MovieClip all' interno di preloader.swf, al Display Object altrimenti non sarebbe visibile:
addChild(loader);


Allego i files sorgente:
Attached Files
File Type: zip Preloader.zip (1.71 MB, 314 views)

__________________

 


I recommend: Essential Actionscript 3.0

- Non rispondo ai messaggi privati con domande tecniche. Apri una discussione sul forum !
- I do not reply technicians pvt messages. Open a thread !

Last edited by Flep; 04-06-08 at 23:19..
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #2 (permalink)  
Old 20-09-07, 07:49
Junior Member
 
Join Date: Jul 2007
Posts: 26
Rep Power: 0
cyberwolf4ever is on a distinguished road
e per quanto riguarda il caricamento di swf con delle proprie classi, funziona lo stesso? voglio dire, non da problemi nell'eseguire gli swf con codice?
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #3 (permalink)  
Old 20-09-07, 08:27
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Non da problemi.
Se dovessi avere un SWF con codice sulla Document Class, allora bisogna agire in questo modo:
http://www.flepstudio.org/tutorials/...070813144.html

Oppure hai ha disposizione questa semplice soluzione:
http://www.flepstudio.org/tutorials/...070806137.html
__________________

 


I recommend: Essential Actionscript 3.0

- Non rispondo ai messaggi privati con domande tecniche. Apri una discussione sul forum !
- I do not reply technicians pvt messages. Open a thread !
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #4 (permalink)  
Old 20-09-07, 11:52
Junior Member
 
Join Date: Jul 2007
Posts: 26
Rep Power: 0
cyberwolf4ever is on a distinguished road
grazie mille ;)
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #5 (permalink)  
Old 08-12-07, 17:50
Junior Member
 
Join Date: Dec 2007
Posts: 14
Rep Power: 0
lorenz82 is on a distinguished road
Re: Preloader con Flash CS3

Scusate un attimo, io con l'as3 ci sto uscendo un pò pazzo, ma non era 10 miliardi di volte più veloce fare un preloader con as2? O_O non capisco come mai hanno complicato cosi tanto l'as3? io con as2 un preloader lo faccio scrivendo al messimo 6 righe di codice sulla time line.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

Flash Multi Gallery
  #6 (permalink)  
Old 09-12-07, 06:45
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Re: Preloader con Flash CS3

Quote:
Originally Posted by lorenz82 View Post
Scusate un attimo, io con l'as3 ci sto uscendo un pò pazzo, ma non era 10 miliardi di volte più veloce fare un preloader con as2? O_O non capisco come mai hanno complicato cosi tanto l'as3? io con as2 un preloader lo faccio scrivendo al messimo 6 righe di codice sulla time line.
Ciao e benvenuto
Anche con la versone 3 si fa un preloader con poche righe di codice. Questo esempio è un esempio di un preloader avanzato, sviluppato in classi.
Scritto una volta... scritto per sempre, lo potresti usare per ogni progetto.

Con poche righe di codice puoi dare un' occhiata a questo preloader:
Preloader per principianti
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #7 (permalink)  
Old 09-12-07, 15:08
Junior Member
 
Join Date: Dec 2007
Posts: 14
Rep Power: 0
lorenz82 is on a distinguished road
Re: Preloader con Flash CS3

Ciao Flep, innanzitutto ti faccio i miei complimenti e spero che tu continui con questo progetto perchè il tuo sito è una fonte di iscpirazione per me, credo dovresti cominciare a fare qualche tutorial anche su Papervision3d.

Tornando On Topic, devo confessarti che anche il preload per principianti con poche righe mi sembra alquanto ostico, io ricordo con la versione 2 di AS scrivevo solo 3 righe e di molto facili. non c'è nulla del genere per as3?
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #8 (permalink)  
Old 09-12-07, 15:12
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Re: Preloader con Flash CS3

Ciao

Il codice del preloader per principianti è il minimo codice utilizzabile per creare un preloader con AS 3.0 .
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #9 (permalink)  
Old 02-05-08, 14:19
Zolmandacuba's Avatar
Member
 
Join Date: Apr 2008
Posts: 60
Rep Power: 1
Zolmandacuba is on a distinguished road
Send a message via Skype™ to Zolmandacuba
Re: Preloader con Flash CS3

ciao flep,

come faccio a simulare tutte le volte il tempo di caricamento? mi spiego: dopo il primo caricamento i dati del bitmap rimangono in memoria, quindi il secondo caricamento è cosi istantaneo che non si riesce a vedere l'animazione della barra...........c'è un modo per farlo rallentare nel caricare ogni volta?
sarebbe utile per, ad esempio, capire meglio l'animazione della barra......

ciao grazie
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #10 (permalink)  
Old 12-05-08, 10:32
Junior Member
 
Join Date: Apr 2008
Posts: 25
Rep Power: 0
gianlucafg is on a distinguished road
Riferimento: Preloader con Flash CS3

Ho dei problemi con tutti i preloader che ho scaricato dal vostro sito.
Mi spiego meglio, il caricamento funziona, ma nel momento in cui lo faccio puntare al mio SWF accade una cosa strada.
Durante il caricamento comincio già a sentire il loop musicale che ho inserito, e quando scompare il preloader già sono avanzati molti fotogrammi.
In pratica è come se mentre carica comincia a far partire l'swf che sto caricando.
Come posso fare?
Grazie
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

Reply

Bookmarks

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is On
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump

Similar Threads

Thread Thread Starter Forum Replies Last Post
Preloader with Flash CS3 - advanced Flep Tutorials 67 27-10-08 11:11
Preloader per pagina non in flash _MaNueL_ Flash CS3 generale 1 30-07-08 17:22
Preloader della Timeline con Flash CS3 Flep Articoli e tutorials 8 03-07-08 21:32
Riferimento: Preloader della Timeline con Flash CS3 eturella Actionscript 3.0 base 1 15-11-07 15:18
Preloader della Timeline con Flash CS3 mariano.martucci AIUTO utilità free 5 06-08-07 10:53


All times are GMT. The time now is 11:21.


Powered by vBulletin versione 3.7.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0 RC4
Forum SiteMap


FlepStudio
by Filippo Lughi
P.IVA 03605860406