Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

swapDepths...rimosso

This is a discussion on swapDepths...rimosso within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; La gestione dei depths in Flash CS3 con Actionscript 3.0 è cambiata parecchio. Con Actionscript 2.0 i metodi swapDepths ...


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 (permalink)  
Old 19-09-07, 16:39
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
swapDepths...rimosso

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 !
__________________

 


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 08-04-08, 11:57
Junior Member
 
Join Date: Mar 2008
Posts: 15
Rep Power: 0
seal is on a distinguished road
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!!!
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #3 (permalink)  
Old 09-04-08, 17:46
Junior Member
 
Join Date: Nov 2007
Posts: 1
Rep Power: 0
domini is on a distinguished road
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!
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #4 (permalink)  
Old 26-05-08, 01:51
just a flasher
 
Join Date: Mar 2008
Posts: 118
Rep Power: 1
Teejay is on a distinguished road
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!
_
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #5 (permalink)  
Old 28-05-08, 22:58
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Re: swapDepths...rimosso

Grande Teejay !
__________________

 


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

Flash Multi Gallery
  #6 (permalink)  
Old 17-06-08, 11: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: 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
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #7 (permalink)  
Old 17-06-08, 12:52
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: 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 13:08..
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #8 (permalink)  
Old 17-06-08, 16:21
just a flasher
 
Join Date: Mar 2008
Posts: 118
Rep Power: 1
Teejay is on a distinguished road
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!
_
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #9 (permalink)  
Old 17-06-08, 17:52
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: 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?
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #10 (permalink)  
Old 17-06-08, 19:49
just a flasher
 
Join Date: Mar 2008
Posts: 118
Rep Power: 1
Teejay is on a distinguished road
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à.
__________________
_
_

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

Last edited by Teejay; 17-06-08 at 19:51..
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
attachMovie - rimosso anche quello Flep Articoli e tutorials 7 30-10-08 08:08
swapDepths removed ! Flep Tutorials 2 07-08-08 20:24
DuplicateMovieClip - rimosso Flep Articoli e tutorials 0 20-09-07 13:40
onRelease rimosso Flep Articoli e tutorials 0 19-09-07 13:32


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


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