Flash Gallery | Flash Templates | Flash Menu | Flash Design | Flash Audio & Video

Video Corsi Actionscript 3.0


+ Reply to Thread
Results 1 to 3 of 3

Thread: indexOf - metodo della classe Array

  1. #1
    Administrator Living At The FlepStudio! Flep is on a distinguished road
    Join Date
    Jul 2007
    Posts
    5,452
    Rep Power
    8

    indexOf - metodo della classe Array

    amazing Flash templates

    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 !


     


  2. #2
    Junior Member Settled In smash is on a distinguished road
    Join Date
    Mar 2008
    Posts
    7
    Rep Power
    0

    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...

  3. #3
    CSS.FlepStudio.org Moving My Stuff To The FlepStudio Onsitus is on a distinguished road Onsitus's Avatar
    Join Date
    Jul 2007
    Posts
    1,366
    Rep Power
    4

    Re: indexOf - metodo della classe Array

    Fla...
    Attached Files

+ Reply to Thread

Similar Threads

  1. Condivisione array tra più funzioni della stessa classe
    By pagandre in forum Actionscript 3.0 avanzato
    Replies: 5
    Last Post: 24-11-09, 09:56
  2. Astensione della MovieClip con metodo che non funziona
    By Donovant in forum Actionscript 3.0 base
    Replies: 1
    Last Post: 08-11-08, 13:06
  3. Uso della proprieta bufferingBar della Classe FLVPlyback
    By jseeker in forum Actionscript 3.0 avanzato
    Replies: 4
    Last Post: 13-09-08, 15:58
  4. indexOf - method of Array class
    By Flep in forum Tutorials
    Replies: 1
    Last Post: 05-08-08, 09:24
  5. Metodo splice della classe Array
    By Flep in forum Articoli e tutorials
    Replies: 1
    Last Post: 18-06-08, 22:51

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

Search Engine Optimization by vBSEO