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

Video Corsi Actionscript 3.0


+ Reply to Thread
Page 1 of 2 1 2 LastLast
Results 1 to 10 of 13

Thread: swapDepths...rimosso

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

    swapDepths...rimosso

    flash templates
    La gestione dei depths in Flash CS3 con Actionscript 3.0 è cambiata parecchio.
    Con Actionscript 2.0 i metodi swapDepths e getDepth sembravano più semplici da capire ma spesso il Flash Player faceva un po di confusione con scripts in cui la gestione dei depths era davvero massiccia.
    Ora con Actionscript 3.0 è il DisplayObject che gestisce i dpeths dei child objects che noi aggiungiamo.
    Premetto che la gestione dei depths in Flash CS3 è davvero molto migliorata in quanto è stata ottimizzata parecchio.

    Entriamo in un esempio concreto...

    Creo un FLA e lo chiamo ' swap.fla ' .
    Creo la Document Class, un file AS che salvo con nome ' Swap.as ' .
    Vediamo com'è :
    Code:
    package
    {
    	import flash.display.MovieClip;
    	import flash.utils.Timer;
    	import flash.events.TimerEvent;
    	
    	public class Swap extends MovieClip
    	{
    		private const numSprites:Number=13;
    		private const higher_depth:Number=numSprites+1;
    		
    		private var counter:int=-1;
    		
    		private var clips_array:Array;
    		
    		private var timer:Timer;
    		
    		public function Swap()
    		{
    			init();
    			createClips();
    			startTimer();
    		}
    		
    		private function init():void
    		{
    			stage.frameRate=31;
    			clips_array=new Array();
    		}
    		
    		private function createClips():void
    		{
    			for(var i:int=0;i < numSprites;i++)
    			{
    				var clip:MovieClip=new MovieClip();
    				clip.graphics.beginFill(getRandomColor(),1);
    				clip.graphics.drawCircle(35+40*i,50,25);
    				addChild(clip);
    				clips_array.push(clip);
    			}
    		}
    		private function getRandomColor():Number
    		{
    			var red:Number=Math.floor(Math.random()*256);
    			var green:Number=Math.floor(Math.random()*256);
    			var blue:Number=Math.floor(Math.random()*256);
    			var color:Number=Number('0x'+red.toString(16)+green.toString(16)+blue.toString(16));
    			return(color);
    		}
    		
    		private function startTimer():void
    		{
    			timer=new Timer(500,0);
    			timer.addEventListener(TimerEvent.TIMER,scambia);
    			timer.start();
    		}
    		
    		private function scambia(t:TimerEvent):void
    		{
    			counter++;
    			if(counter > clips_array.length-1)
    				counter=0;
    			if(counter < clips_array.length-1)
    				setChildIndex(clips_array[counter],getChildIndex(clips_array[counter+1]));
    			if(counter==clips_array.length-1)
    				setChildIndex(clips_array[counter],getChildIndex(clips_array[counter-1]));
    		}
    	}
    }
    Risultato:










    Analizziamo il codice.
    Il metodo che interessa, in cui avviene lo scambio di depth nella classe Swap da me scritta, è il metodo ' scambia ' .
    Dopo aver creato le clips e inseritele in un array, aziono un timer che ogni mezzo secondo chiama appunto il metodo scambia, che...
    aumenta il valore di una variabile numerica chiamata ' counter ' che utilizzo come indice dell' array creato per recuperare la clip che m' interessa
    counter++;

    adesso teoricamente potrei scambiare i livelli ( depths ) della clip nell' array con indice del valore di counter con quello della clip nell' array con indice del valore di counter +1, ma i problemi nascono quando il counter ha valore del length dell' array meno uno ( quindi l'ultima clip), quindi ci sono un po di logiche condizionali, ma quello che interessa in questo script è:

    setChildIndex, questo metodo sarebbe stato come un ipotetico setDepth in Actionscript 2.0 (che non esisteva) , infatti in AS2 non si poteva cambiare direttamente il depth di una clip, bisognava scambiarlo per forza con un altro. Invece setChildIndex di Actionscript 3.0 da la possibilità di settare il depth di una clip passandogli come vlaori la clip su cui voglio agire ed il numero di depth su cui deve spostarsi.

    come faccio a sapere che numero di depth passargli ? Lo recupero con getChildIndex che restituisce il numero del depth della clip che gli passo.

    Da quì ecco il perchè di queste righe:
    setChildIndex(clips_array[counter],getChildIndex(clips_array[counter+1]));
    setChildIndex(clips_array[counter],getChildIndex(clips_array[counter-1]));


    Stay tuned !

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

    Re: swapDepths...rimosso

    ok... te sei un genio e vabbè... ma per me povero ignorante che devo spostare un movieclip dietro un normale disegno (ke per necessità non posso trasformare in mc)???

    che codice devo usare?!


    grazie!!!

  3. #3
    Junior Member Settled In domini is on a distinguished road
    Join Date
    Nov 2007
    Posts
    1
    Rep Power
    0

    Re: swapDepths...rimosso

    si, mi riallaccio al commento sopra....
    flep studio è un' ottima comunità, se però, parlando di temi tanto fondamentali come il cambiamento dello swapdepth, ci fosse la possibilità di fare esempi banalissimi,( mooolto piu terra terra del " prendo 40 palle colorate ed automatizzo lo spostameno dei primi piani in modo che piu strafico nn si puo ecc...) saremmo contenti anche noi poveri "designer ma non programmatori":razza odiata (ornitorinchi inquadrabili) ma che non merita di sparire dalla faccia della terra solo perchè la meteora as3.0 entra in collisione coi desktop sconvolgendo quei 4 comandi che, a fatica, inserivamo in flash con quel "timore tremore" tipico di chi mette le mani nel calderone dello stregone capo sperando che esca la magia giusta..

    per dirne una:ho un pulsante che con lo swapdepts faceva pluff! e spuntava sopra gli altri come un bravo marines ora come ci si salva per fare una cosa stupida così?
    Ma soprattutto la potevano lasciare stupida così? era perfetta!!
    TUTELATECI.
    grazie.
    ps.
    complimenti cmq per l'ottimo lavoro e le risorse che mettete aggratisse online!

  4. #4
    just a flasher Flash Obsessed Teejay is on a distinguished road
    Join Date
    Mar 2008
    Posts
    128
    Rep Power
    3

    Riferimento: swapDepths...rimosso

    Per portare istantaneamente un oggetto myDisplayObject qualsiasi in primo piano si può usare questo codice:


    Code:
    for (var i:int=0; ; i++) {
         try {
             setChildIndex(myDisplayObject, i);
         } catch (RangeError) {
             break;
         }
    }
    _
    _

    Teejay, just a flasher!
    Se vi sono d'aiuto, premete la bilancia!
    _

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

    Re: swapDepths...rimosso

    Grande Teejay !

  6. #6
    Member Flash Addict Zolmandacuba is on a distinguished road Zolmandacuba's Avatar
    Join Date
    Apr 2008
    Posts
    60
    Rep Power
    3

    Re: swapDepths...rimosso

    var color:Number=Number('0x'+red.toString(16)+green.to String(16)+blue.toString(16));

    return(color);



    sembra funzionare anche se tolgo i 'toString(16)', tuttavia il risultato
    è visibilmente diverso.
    Scusa, perchè bisogna mettere toString? Ho capito che il '16' è la radice che specifica
    il tipo di conversione (se si omette flash la legge =10), ma non ho capito come mai è necessario inserire
    il toString!
    Cosa poi sia una radice di conversione, god only knows....and flep!

    come sempre mi inchino alle tue doti

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

    Re: swapDepths...rimosso

    Per quanto ne so, provero a spiegare la cosa:
    Questo per esempio
    var blue:Number=Math.floor(Math.random()*256);
    ti restituisce a random un numero intero (Math.floor) tra 0 e 256 (Math.random() che risulta tra 0 e 1.0 multiplicato per 256 che sarebbe la codifica decimale dei colori)
    Il toString(16) converta questo numero decimale in esadecimale basandosi su un sistema di numerazione in base 16 che dara ciffre tra 0 e 9 e da A a F per avere un valore di colore di tipo #FFFFFF (in as scritto 0xFFFFFF)

    Credo che sara quello che vogliono dire con la radice di conversione.
    Sistema numerico esadecimale - Wikipedia
    Cosi, non ci sono piu nessun segretti.

    Dai che ti aggiungo pure quello che dicono del toString sulla Biblia mia (tradotto dal inglese, fai sforzi per capire):

    Il metodo toString() recupera il valore da un istanza di valore numerico, converta e restituisce quel valore sotto forma di 'String'. L'argomento (opzionale, il 16 in questo caso),
    converta il valore numerico tra le differente base di conversione (binario, decimale, octal (in italiano non ho idea), esadecimale). Le lettere A-Z sono usate per rapresentare numeri di valori 10-35, anche se normalmente vengono usati solo da A a F (valore esadecimale con equivalente da 10 a 15).

    E adesso, siamo ancora piu confusi!!!



    Quote Originally Posted by Zolmandacuba View Post
    var color:Number=Number('0x'+red.toString(16)+green.to String(16)+blue.toString(16));

    return(color);



    sembra funzionare anche se tolgo i 'toString(16)', tuttavia il risultato
    è visibilmente diverso.
    Scusa, perchè bisogna mettere toString? Ho capito che il '16' è la radice che specifica
    il tipo di conversione (se si omette flash la legge =10), ma non ho capito come mai è necessario inserire
    il toString!
    Cosa poi sia una radice di conversione, god only knows....and flep!

    come sempre mi inchino alle tue doti
    Last edited by Onsitus; 17-06-08 at 12:08.

  8. #8
    just a flasher Flash Obsessed Teejay is on a distinguished road
    Join Date
    Mar 2008
    Posts
    128
    Rep Power
    3

    Riferimento: swapDepths...rimosso

    Esatto, preciso solo che, nella codifica decimale dei colori si hanno valori da 0 a 255 (non 256)

    Octal si traduce come ottale in italiano.
    _
    _

    Teejay, just a flasher!
    Se vi sono d'aiuto, premete la bilancia!
    _

  9. #9
    Member Flash Addict Zolmandacuba is on a distinguished road Zolmandacuba's Avatar
    Join Date
    Apr 2008
    Posts
    60
    Rep Power
    3

    Re: swapDepths...rimosso

    Vi ringrazio, se ho ben capito, in pratica, trasformare quei numeri sputati dal Math in base 16 mi serve come dice Onsitus per avere un risultato del tipo

    6876fa67b, ad esempio? dal momento che nella tabella dei colori i colori sono classificati in numeri ni base 16?

    ma se provo a fare:


    var red:Number=Math.floor(Math.random()*256);
    var green:Number=Math.floor(Math.random()*256);
    var blue:Number=Math.floor(Math.random()*256);
    var color:Number=Number('0x'+red.toString(16)+green.to String(16)+blue.toString(16));

    trace(color);

    return(color)

    scopro con il trace che non ho mai valori numerici e letterali. Infatti ho solo una cifra numerica lunga. Adesso non so, forse c'è un errore?

    Ho guardato anche io su una guida in inglese, e propone lo stesso esempio:


    var r:int = new int(250);
    var g:int = new int(128);
    var b:int = new int(114);
    var rgb:String = "0x"+ r.toString(16)+g.toString(16)+b.toString(16);
    trace(rgb); // 0xfa8072

    questo si che come output dà davvero un valore in base 16 (0xfa8072)
    ma questo perchè rgb è di tipo String!

    nel nostro caso la funzione getRandomColor sputa un numero lungo ma solo numerico.
    E' vero che le è richiesto di sputare un number e non una String, ma allora
    in questo caso perchè tutta la questione dei .toString(16) se tanto il risultato
    è sempre un Number in base 10?

    Ho detto una cazzata?

  10. #10
    just a flasher Flash Obsessed Teejay is on a distinguished road
    Join Date
    Mar 2008
    Posts
    128
    Rep Power
    3

    Riferimento: swapDepths...rimosso

    Quel numero lungo che ottieni dal trace color è normalissimo ed è la codifica decimale del colore passato in esadecimale.

    Ad es, per il colore #4E73A5

    Corrisponde a:

    4E (in decimale 4*16+14 = 78) * 256 * 256 = 5.111.808 +
    73 (in decimale 7*16+3 = 115) * 256 = 29.440 +
    A5 (in decimale 10*16+5=165) = 165

    = 5.141.413


    La codifica esadecimale RGB è usata per comodità.
    Last edited by Teejay; 17-06-08 at 18:51.
    _
    _

    Teejay, just a flasher!
    Se vi sono d'aiuto, premete la bilancia!
    _

+ Reply to Thread
Page 1 of 2 1 2 LastLast

LinkBacks (?)


Similar Threads

  1. attachMovie - rimosso anche quello
    By Flep in forum Articoli e tutorials
    Replies: 7
    Last Post: 30-10-08, 07:08
  2. swapDepths removed !
    By Flep in forum Tutorials
    Replies: 2
    Last Post: 07-08-08, 19:24
  3. DuplicateMovieClip - rimosso
    By Flep in forum Articoli e tutorials
    Replies: 0
    Last Post: 20-09-07, 12:40
  4. onRelease rimosso
    By Flep in forum Articoli e tutorials
    Replies: 0
    Last Post: 19-09-07, 12:32

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