Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

indexOf - metodo della classe Array

This is a discussion on indexOf - metodo della classe Array within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Ciao a tutti ! Durante i tutorials di Actionscript 3.0 , Abbiamo visto cosa sono gli Array e quanto possono essere ...


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 20-12-07, 06:34
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
indexOf - metodo della classe Array

Ciao a tutti !


Durante i tutorials di Actionscript 3.0, Abbiamo visto cosa sono gli Array e quanto possono essere importanti utilizzando Flash CS3.
Inoltre, si è anche visto cosa fa di preciso il metodo splice della classe Array.


Perchè ricordo tutto questo ?
Mi serve per presentare il tutorial che spiegherà come creare una griglia di quadrati in Flash ed ogni quadrato sarà selezionabile o deselezionabile.
In sostanza, al click del mouse su uno dei quadrati della griglia il quadrato stesso, se non era già stato selezionato, sarà aggiunto ad un Array altrimenti se fosse stato già selezionato sarà rimosso dall' array.


Detto questo, per fare tutto ciò ci serve il metodo indexOf della classe Array di Actionscript 3.0 .


Vediamo un esempio concreto...



Creo un FLA che salvo con nome ' main.fla '. Al suo interno ho solo un campo di testo dinamico che visualizzerà le espansioni o collassi dell' Array. 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.events.Event;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	import caurina.transitions.Tweener;
	
	public class Main extends MovieClip
	{
		private const TOTAL_SQUARES:int=100;
		private const ROW_COUNT:int=10;
		private const SIDE:int=40;
		
		private var clips_array:Array=new Array();
		private var temp_array:Array=new Array();
		
		public function Main()
		{
			addEventListener(Event.ADDED_TO_STAGE,init);
		}
		
		private function init(evt:Event):void
		{
			removeEventListener(Event.ADDED_TO_STAGE,init);
			
			stage.frameRate=31;
			
			createSquares();
			addListeners();
		}
		
		private function createSquares():void
		{
			for(var i:int=0;i < TOTAL_SQUARES;i++)
			{
				var fill_mc:MovieClip=new MovieClip();
				fill_mc.name='fill_'+i+'_mc';
				fill_mc.graphics.beginFill(0x666666,1);
				fill_mc.graphics.drawRect(0,0,SIDE,SIDE);
				fill_mc.graphics.endFill();
				fill_mc.x=10+Math.floor(i/ROW_COUNT)*SIDE;
				fill_mc.y=10+(i%ROW_COUNT)*SIDE;
				
				var stroke_mc:MovieClip=new MovieClip;
				stroke_mc.graphics.lineStyle(1,0x333333,1);
				stroke_mc.graphics.drawRect(0,0,SIDE,SIDE);
				stroke_mc.graphics.endFill();
				stroke_mc.x=fill_mc.x;
				stroke_mc.y=fill_mc.y;
				
				var field:TextField=new TextField();
				field.selectable=false;
				field.text=i.toString();
				field.width=field.textWidth+5;
				field.height=field.textHeight+5;
				field.x=fill_mc.x;
				field.y=fill_mc.y;
				
				var clip:MovieClip=new MovieClip();
				clip.id=i;
				clip.selected=false;
				clip.addChild(fill_mc);
				clip.addChild(stroke_mc);
				clip.addChild(field);
				addChild(clip);
				
				clip.mouseChildren=false;
				clip.buttonMode=true;
				
				clips_array.push(clip);
			}
		}
		
		private function addListeners():void
		{
			for(var i:int=0;i < clips_array.length;i++)
			{
				clips_array[i].addEventListener(MouseEvent.MOUSE_OVER,setOver);
				clips_array[i].addEventListener(MouseEvent.MOUSE_OUT,setOut);
				clips_array[i].addEventListener(MouseEvent.CLICK,setClick);
			}
		}
		
		private function setOver(evt:MouseEvent):void
		{
			var clip:MovieClip=evt.target as MovieClip;
			var clip_child:MovieClip=clip.getChildByName('fill_'+clip.id+'_mc') as MovieClip;
			if(!clip.selected)
				Tweener.addTween(clip_child,{_color:0x999999,time:.6,transition:"easeOutQuad"});
		}
		
		private function setOut(evt:MouseEvent):void
		{
			var clip:MovieClip=evt.target as MovieClip;
			var clip_child:MovieClip=clip.getChildByName('fill_'+clip.id+'_mc') as MovieClip;
			if(!clip.selected)
				Tweener.addTween(clip_child,{_color:0x666666,time:.6,transition:"easeOutQuad"});
		}
		
		private function setClick(evt:MouseEvent):void
		{
			var clip:MovieClip=evt.target as MovieClip;
			var clip_child:MovieClip=clip.getChildByName('fill_'+clip.id+'_mc') as MovieClip;
			if(!clip.selected)
			{
				temp_array.push(clip.id);
				Tweener.addTween(clip_child,{_color:0xCC9900,time:.6,transition:"easeOutQuad"});
			}
			else
			{
				temp_array.splice(temp_array.indexOf(clip.id),1);
				Tweener.addTween(clip_child,{_color:0x666666,time:.6,transition:"easeOutQuad"});
			}
			
			clip.selected=!clip.selected;
			
			info_txt.text=temp_array.toString();
		}
	}
}
Risultato ( selezionare/deselezionare i numeri della griglia ):






Analizziamo il codice.


In questo script non c'è niente che non sia stato visto e spiegato su FlepStudio tranne appunto la riga nella quale utilizo il metodo indexOf della classe Array.
Per cui, velocemente:


- nel metodo createSquares, creo una serie di MovieClip quadrate ( una per lo sfondo, una per il bordo ed una che contiene sia lo sfondo che il bordo ) con relativo campo di testo e le attacco allo stage.


- nel metodo addListeners, aggiungo i listeners nevessari in ascolto degli eventi del mouse


- nei metodi setOver, setOut e setClick gestisco gli eventi assegnando appunto delle azioni ad ogni evento del mouse intercettato


- le Tween sono fatte con il Tweener di Zeh Fernando, per chi non la conoscesse, può guardare questo tutorial: Caurina Tweener


- ecco le righe sulle quali voglio focalizzare la vostra attenzione ( si trovano dentro alla funzione setClick ):


if(!clip.selected)
{
temp_array.push(clip.id);
Tweener.addTween(clip_child,{_color:0xCC9900,time: .6,transition:"easeOutQuad"});
}
else
{
temp_array.splice(temp_array.indexOf(clip.id),1);
Tweener.addTween(clip_child,{_color:0x666666,time: .6,transition:"easeOutQuad"});
}


Se la clip che è stata cliccata ha la proprietà selected che è false, allora significa che in quel momento non è stata selezionata, quindi inserisco in temp_array l' id della clip ( che gli ho assegnato in fase di creazione ) ed eseguo una Tween di colore.
Se invece la proprietà selected della clip è true, allora significa che la stessa clip era già stata selezionata e quindi devo rimuovere il suo id da temp_array.
Per fare questo, il metodo splice non basta perchè non mi da la garanzia che l' id della clip corrisponde allo stesso numero indice in cui si trova appunto il suo id.
La garanzia assoluta me la ottengo invece utilizzando il metodo indexOf perchè passandogli un valore mi restituisce il numero di indice nel quale si trova appunto quel valore.
Quindi dico di fare un splice a temp_array dell' indice datomi da indexOf(id della clip cliccata).


Alla prossima & stay tuned !


 

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

  #2 (permalink)  
Old 12-06-08, 18:47
Junior Member
 
Join Date: Mar 2008
Posts: 6
Rep Power: 0
smash is on a distinguished road
Re: indexOf - metodo della classe Array

Ciao questo forum è fondamentale...e ti ringrazio già ora per il supporto...

Ho provato a ricreare il tutto ma con scarso risultato...

Cioè alla fine mi genera questo errore e anche se tolgo la stringa recriminata info_txt.text=temp_array.toString();
non riesco a visualizzare nulla...
Riesci ad allegare l'fla così per capire meglio o a spiegarmi?
Grazie e buona serata...
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #3 (permalink)  
Old 12-06-08, 19:26
Onsitus's Avatar
CSS.FlepStudio.org
 
Join Date: Jul 2007
Location: Nettuno Beach
Posts: 1,012
Rep Power: 3
Onsitus is on a distinguished road
Re: indexOf - metodo della classe Array

Fla...
Attached Files
File Type: zip indexOf.zip (45.3 KB, 12 views)

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
indexOf - method of Array class Flep Tutorials 1 05-08-08 09:24
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
Metodo splice della classe Array Flep Articoli e tutorials 1 18-06-08 22:51


All times are GMT. The time now is 22:47.


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