Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

Metodo splice della classe Array

This is a discussion on Metodo splice della classe Array within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Saaaaaaaaaalve ! Vi ricordate che abbiamo visto in questo tutorial quanto può essere importante un Array ? Avete anche letto il tutorial ...


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
  1 links from elsewhere to this Post. Click to view. #1 (permalink)  
Old 09-10-07, 07:08
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Metodo splice della classe Array

Saaaaaaaaaalve !

Vi ricordate che abbiamo visto in questo tutorial quanto può essere importante un Array ?
Avete anche letto il tutorial della sezione Actionscript base: gli Array ?
Se s', è giunto il tempo di vedere uno dei preziosi metodi che la classe Array di Actionscript 3.0 ci mette a disposizione.
Il metodo splice.

Questo metodo non fa altro che aggiungere o eliminare un elemento dall' array senza creare una copia dell' array stesso.
Supponiamo che vogliamo creare un banner a rotazione e devono girare dei banners pubblicitari dei nostri clienti.
Questo banner, carica un SWF esterno ogni tot secondi.
Dovrebbe farlo in modo casuale ma senza duplicati. Ne senso che ad ogni serie non deve ricaricare lo stesso SWF due volte.
Allora il metodo splice fa proprio al caso nostro...

Leggi tutto

Creo un FLA che salvo con nome ' main.fla '.

Creo la Document Class, un file AS che salvo con nome ' Main.as ', implementata in questo modo:
Code:
package
{
	import flash.display.MovieClip;
	import flash.utils.Timer;
	import flash.events.TimerEvent;
	
	public class Main extends MovieClip
	{
		private var movies:Array;
		
		private var timer:Timer;
		
		public function Main()
		{
			initArray();
			initTimer();
		}
		
		private function initArray():void
		{
			movies=new Array('swf_1','swf_2','swf_3','swf_4','swf_5','swf_6','swf_7','swf_8','swf_9','swf_10','swf_11','swf_12','swf_13','swf_14');
		}
		
		private function initTimer():void
		{
			timer=new Timer(50,movies.length);
			timer.addEventListener(TimerEvent.TIMER,fishNumber);
			timer.addEventListener(TimerEvent.TIMER_COMPLETE,finish);
			timer.start();
		}
		
		private function fishNumber(evt:TimerEvent):void
		{
			var r:int=Math.floor(Math.random()*movies.length);
			trace(movies[r]);
			movies.splice(r,1);
		}
		
		private function finish(evt:TimerEvent):void
		{
			timer.reset();
			trace('------------------------');
			initArray();
			initTimer();
		}
	}
}
Ecco il risultato dei trace:







Analizziamo il codice:

Proprietà

un array in cui inserisco i nomi degli SWF da caricare
private var movies:Array;
un timer
private var timer:Timer;

Funzione Costruttrice
chiamo il metodo initArray
initArray();
chiamo il metodo initTimer
initTimer();

Metodi
initArray();
popolo l' array
movies=new Array('swf_1','swf_2','swf_3','swf_4','swf_5','swf _6','swf_7','swf_8','swf_9','swf_10','swf_11','swf _12','swf_13','swf_14');

initTimer();
creo un nuovo timer, con velocità 300 ( è solo per questo esempio, naturalmente per un rotatore di banners basterebbe aumentare il valore per ottenere tempi più lunghi ) e come numero di volte la lunghezza dell' array
timer=new Timer(300,movies.length);
dico al timer di aggiungere un listener che chiamerà ogni 300 centesimi di secondo il metodo fishNumber
timer.addEventListener(TimerEvent.TIMER,fishNumber );
aggiungo un altro listener che mi avviserà quando il timer avrà completato le chiamate
timer.addEventListener(TimerEvent.TIMER_COMPLETE,f inish);
aziono il timer
timer.start();

fishNumber();
questo metodo viene chiamato ogni 300 centesimi di secondo
creo una variabile numerica alla quale assegno un valore casuale ( approssimato per difetto ) da zero alla lunghezza dell' array
var r:int=Math.floor(Math.random()*movies.length);
recupero l' elemento dell' array nell' indice pari al valore della variabile r
trace(movies[r]);
ecco lo splice! Dico a Flash di rimuovere dall' array l' elemento nell' indice r e di rimuovere solo lui ( se al posto di 1 avessi scritto 2, Flash toglierebbe 2 elementi: quello nell' indice r ed il precedente, se avessi scritto 3, Flash rimuove quello nell' indice r più i due precedenti...ma non è il nostro caso in quanto voglio eliminare solo l' elemento nell' indice pari al valore di r )
movies.splice(r,1);

finish();
questo metodo viene chiamato ogni volta che il timer ha finito un ciclo di chiamate ( pari alla lunghezza dell' array )
faccio un reset del timer
timer.reset();
eseguo un trace per ' spezzare ', in modo da capire quando il timer finisce un ciclo di chiamate
trace('------------------------');
richiamo il metodo initArray in modo da ripopolare l' array con i nomi degli SWF
initArray();
richiamo il metodo initTimer che ricomincerà un altro ciclo di chiamate
initTimer();

Alla prossima !
__________________

 


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

  #2 (permalink)  
Old 18-06-08, 22:51
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: Metodo splice della classe Array

utilissimo Flep!!!!!

però facendo un trace(movies) dopo un ciclo ed avendo provato a scrivere movies.splice(r,2) invece che movies.splice(r,1), ho notato che toglie ll'elemento dopo, non quello precedente......
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
Actionscript 3 Astensione della MovieClip con metodo che non funziona Donovant Actionscript 3.0 base 1 08-11-08 13:06
Actionscript 3 Uso della proprieta bufferingBar della Classe FLVPlyback jseeker Actionscript 3.0 avanzato 4 13-09-08 15:58
Actionscript 3 accedere a un metodo di documentclass da un classe legata a movieclip boxbuilder Actionscript 3.0 avanzato 4 07-07-08 16:11
indexOf - metodo della classe Array Flep Articoli e tutorials 2 12-06-08 19:26
splice method of the Array class Flep Tutorials 0 19-11-07 06:55


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


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