Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

Mouse e proporzioni con Actionscript 3.0

This is a discussion on Mouse e proporzioni con Actionscript 3.0 within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Ciao a tutti ! Torniamo a parlare un po di effettistica ( vogliamo chiamarla area di ricreazione? ). Abbiamo visto in un articolo ...


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 21-09-07, 16:31
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Mouse e proporzioni con Actionscript 3.0

Ciao a tutti !
Torniamo a parlare un po di effettistica ( vogliamo chiamarla area di ricreazione? ).
Abbiamo visto in un articolo come applicare lo spostamento del mouse ad un' animazione utilizzando inerzia e frizione.
Entriamo nel vivo...*

Creo un FLA che salvo con nome ' main.fla ' .
Al suo interno:
- 4 livelli, con nomi: ( dal più alto al più basso ) code, container1, gradient, container2
- 2 keyframe per livello


Livello code:
primo keyframe - ho un campo di testo dinamico con nome ' info_txt ' e uno stop();
secondo keyframe - ho uno stop(); ed una chiamata ad una funzione: lets_go();

Livello container1:
primo keyframe - vuoto
secondo keyframe - una MovieClip con nome istanza ' container_mc ' e al suo interno 20 MovieClip di qualsiasi forma

Livello gradient:
primo keyframe - vuoto
secondo keyframe - una MovieClip con nome istanza ' gradient_mc ' e al suo interno una forma rettangolare gradiente

Livello container2:
primo keyframe - vuoto
secondo keyframe un' altra istanza di container_mc ma con nome ' container2_mc ' ( quindi sempe con 20 movieClip al suo interno ).

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.display.DisplayObjectContainer;
	import flash.text.TextField;
	import flash.events.Event;
	import flash.events.ProgressEvent;
	import flash.events.MouseEvent;
	
	public class Main extends MovieClip
	{
		private var clips_array:Array;
		private var clips_array2:Array;
		
		public function Main()
		{
			init();
		}
		
		private function init():void
		{
			stage.frameRate=31;
			
			this.addEventListener(Event.ENTER_FRAME,checkProgress);
		}
		
		private function checkProgress(_progress:Event):void
		{
			var bytes_loaded:Number=_progress.target.loaderInfo.bytesLoaded;
			var bytes_total:Number=_progress.target.loaderInfo.bytesTotal;
			var percent:Number=Math.round(bytes_loaded/bytes_total*100);
			info_txt.text=percent.toString()+' %';
			if(percent>=100)
			{
				this.removeEventListener(Event.ENTER_FRAME,checkProgress);
				this.gotoAndPlay(2);
			}
		}
		
		public function lets_go():void
		{
			initContainer();
			initContainer2();
			initGradient();
			
			container_mc.addEventListener(Event.ENTER_FRAME,movement);
		}
		
		private function initContainer():void
		{
			clips_array=new Array();
			
			for(var i:int=0;i < container_mc.numChildren;i++)
			{
				clips_array.push(container_mc.getChildAt(i));
				
				clips_array[i].width=100;
				clips_array[i].height=100;
				clips_array[i].x=clips_array[i].width*i+20*i;
				clips_array[i].y=stage.stageHeight/2;
				
				clips_array[i].id=i;
				clips_array[i].buttonMode=true;
				clips_array[i].addEventListener(MouseEvent.CLICK,onClick);
			}
		}
		
		private function initContainer2():void
		{
			clips_array2=new Array();
			
			for(var j:int=0;j < container2_mc.numChildren;j++)
			{
				clips_array2.push(container2_mc.getChildAt(j));
				clips_array2[j].width=100;
				clips_array2[j].height=100;
				clips_array2[j].x=clips_array2[j].width*j+20*j;
				clips_array2[j].y=stage.stageHeight/2+clips_array2[0].height-10;
			}
		}
		
		private function initGradient():void
		{
			gradient_mc.x=0;
			gradient_mc.y=clips_array2[0].y-clips_array2[0].height/2;
			container2_mc.alpha=.2;
		}
		
		private function movement(evt:Event):void
		{
			var rapporto:Number=evt.currentTarget.width/stage.stageWidth;
			var arrX:Number=-mouseX*rapporto+stage.stageWidth/2;
			var dx:Number=arrX-evt.currentTarget.x;
			var ax:Number=dx*.1;
			evt.currentTarget.x+=ax;
			container2_mc.x+=ax;
		}
		
		private function onClick(evt:MouseEvent):void
		{
			trace(evt.currentTarget.id);
		}
	}
}
risultato:










Analizziamo il codice:

Proprietà

due arrays in cui inserirò le MovieClip che si trovano all' interno dei due contenitori
private var clips_array:Array;
private var clips_array2:Array;

Funzione costruttrice
chiamo il metodo init()
init();

Metodi
init();
imposto una velocità di frame rate
stage.frameRate=31;
aggiungo un listener in ascolto dell' evento ENTER_FRAME che chiamerà il metodo checkProgress tante volte al secondo pari al numero del frame rate. Sto creando un preloader, esattamente come in questo tutorial.
this.addEventListener(Event.ENTER_FRAME,checkProgr ess);

checkProgress();
calcolo la percentuale tra i bytes caricati e quelli totali
var bytes_loaded:Number=_progress.target.loaderInfo.by tesLoaded;
var bytes_total:Number=_progress.target.loaderInfo.byt esTotal;
var percent:Number=Math.round(bytes_loaded/bytes_total*100);
assegno il valore della percentuale al campo di testo che ho sullo stage: info_txt
info_txt.text=percent.toString()+' %';
if(percent>=100)
{
se la percentuale è maggiore o uguale a 100 fermo ENTER_FRAME
this.removeEventListener(Event.ENTER_FRAME,checkPr ogress);
sposto la timeline al secondo frame nel quale c'è una chiamata ad una funzione che si chiama lets_go() che è quì sulla Document Class
this.gotoAndPlay(2);
}

lets_go();
chiamo in sequenza i metodi initContainer, initContainer2 e initGradient
initContainer();
initContainer2();
initGradient();
aggiungo a container_mc un listener in ascolto dell' evento ENTER_FRAME che chiamerà il metodo movement
container_mc.addEventListener(Event.ENTER_FRAME,mo vement);

initContainer();
inizializzo ( preparo l' array a contenere ciò che gli dirò ) l' array clips_array
clips_array=new Array();
tramite un ciclo con iterazione massima il numero delle MovieClp contenute in container_mc ( che recupero tramite la sua proprietà numChidren ) inserisco tali MovieClip in clips_array
for(var i:int=0;i < container_mc.numChildren;i++)
{
clips_array.push(container_mc.getChildAt(i));
gli imposto una larghezza ed un' altezza ad ognuna
clips_array[i].width=100;
clips_array[i].height=100;
le posiziono orizzontalmente un in riga all' altra
clips_array[i].x=clips_array[i].width*i+20*i;
clips_array[i].y=stage.stageHeight/2;
gli assegno una proprietà in runtime con nome id ( questo perchè vedremo che poi recupero la corrpispettiva proprietà al click di ogni MovieClip e potrei recuperare altri valori da un Array come ad esempio assegnare un url ad ogni clip ( lascio a voi la scelta )
clips_array[i].id=i;
imposto buttonMode a true, in modo cha al rollover sulle MovieClip la manina del mouse sia visibile
clips_array[i].buttonMode=true;
assegno un listener in ascolto ad ogni MovieClip dell' evento CLICK della classe MouseEvent che chiamerà il metodo onClick quando la MovieClip verrà cliccata
clips_array[i].addEventListener(MouseEvent.CLICK,onClick);
}

initContainer2();
stessa identica cosa del metodo initContainer che abbiamo appena visto, solo che la logica viene applicata a container2_mc e le sue MovieClip inserite in clips_array2
clips_array2=new Array();

for(var j:int=0;j < container2_mc.numChildren;j++)
{
clips_array2.push(container2_mc.getChildAt(j));
clips_array2[j].width=100;
clips_array2[j].height=100;
clips_array2[j].x=clips_array2[j].width*j+20*j;
clips_array2[j].y=stage.stageHeight/2+clips_array2[0].height-10;
}

initGradient();
posiziono la MovieClip gradiente ' gradient_mc ' in modo da ottenere un effetto specchio
gradient_mc.x=0;
gradient_mc.y=clips_array2[0].y-clips_array2[0].height/2;
container2_mc.alpha=.2;

movement();
calcolo un rapporto che è il risultato della divisione tra il width di container_mc e la larghezza dello stage
var rapporto:Number=evt.currentTarget.width/stage.stageWidth;
applico l' effetto inerzia tenendo come punto di arrivo la posizione X del mouse moltiplicata per il rapporto pù la metà della larghezza dello stage
var arrX:Number=-mouseX*rapporto+stage.stageWidth/2;
var dx:Number=arrX-evt.currentTarget.x;
var ax:Number=dx*.1;
evt.currentTarget.x+=ax;
aggiungo il valore risultante anche a container2_mc
container2_mc.x+=ax;

onClick();
recupero la proprietà id della MovieClip che è stata cliccata
trace(evt.currentTarget.id);
Allego i files sorgente:
Attached Files
File Type: zip mouse_position.zip (502.1 KB, 36 views)

__________________

 


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 !

Last edited by Flep; 05-06-08 at 00:38..
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #2 (permalink)  
Old 19-05-08, 21:12
Junior Member
 
Join Date: Jan 2008
Posts: 5
Rep Power: 0
marco_mar is on a distinguished road
Re: Mouse e proporzioni con Actionscript 3.0

salve Flep,
come posso eventualmente assegnare url differenti ad ogni movieclip?.....

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

  #3 (permalink)  
Old 28-05-08, 19:19
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Re: Mouse e proporzioni con Actionscript 3.0

Ciao

Diventa così:
Code:
/*
 *************************************
 * http://www.FlepStudio.org      *
 * © Author: Filippo Lughi           *
 *************************************
 */
package
{
	import flash.display.MovieClip;
	import flash.display.DisplayObjectContainer;
	import flash.text.TextField;
	import flash.events.Event;
	import flash.events.ProgressEvent;
	import flash.events.MouseEvent;
	import flash.net.*;
	
	public class Main extends MovieClip
	{
		private var clips_array:Array;
		private var clips_array2:Array;
		private var url_array:Array;
		
		public function Main()
		{
			init();
		}
		
		private function init():void
		{
			stage.frameRate=31;
			
			url_array=new Array("url1","url2","url3","url4","url5","url6","url7","url8","url9","url10");
			
			this.addEventListener(Event.ENTER_FRAME,checkProgress);
		}
		
		private function checkProgress(_progress:Event):void
		{
			var bytes_loaded:Number=_progress.target.loaderInfo.bytesLoaded;
			var bytes_total:Number=_progress.target.loaderInfo.bytesTotal;
			var percent:Number=Math.round(bytes_loaded/bytes_total*100);
			info_txt.text=percent.toString()+' %';
			if(percent>=100)
			{
				this.removeEventListener(Event.ENTER_FRAME,checkProgress);
				this.gotoAndPlay(2);
			}
		}
		
		public function lets_go():void
		{
			initContainer();
			initContainer2();
			initGradient();
			
			container_mc.addEventListener(Event.ENTER_FRAME,movement);
		}
		
		private function initContainer():void
		{
			clips_array=new Array();
			
			for(var i:int=0;i < container_mc.numChildren;i++)
			{
				clips_array.push(container_mc.getChildAt(i));
				
				clips_array[i].width=100;
				clips_array[i].height=100;
				clips_array[i].x=clips_array[i].width*i+20*i;
				clips_array[i].y=stage.stageHeight/2;
				
				clips_array[i].id=i;
				clips_array[i].buttonMode=true;
				clips_array[i].addEventListener(MouseEvent.CLICK,onClick);
			}
		}
		
		private function initContainer2():void
		{
			clips_array2=new Array();
			
			for(var j:int=0;j < container2_mc.numChildren;j++)
			{
				clips_array2.push(container2_mc.getChildAt(j));
				clips_array2[j].width=100;
				clips_array2[j].height=100;
				clips_array2[j].x=clips_array2[j].width*j+20*j;
				clips_array2[j].y=stage.stageHeight/2+clips_array2[0].height-10;
			}
		}
		
		private function initGradient():void
		{
			gradient_mc.x=0;
			gradient_mc.y=clips_array2[0].y-clips_array2[0].height/2;
			container2_mc.alpha=.2;
		}
		
		private function movement(evt:Event):void
		{
			var rapporto:Number=evt.currentTarget.width/stage.stageWidth;
			var arrX:Number=-mouseX*rapporto+stage.stageWidth/2;
			var dx:Number=arrX-evt.currentTarget.x;
			var ax:Number=dx*.1;
			evt.currentTarget.x+=ax;
			container2_mc.x+=ax;
		}
		
		private function onClick(evt:MouseEvent):void
		{
			var richiesta:URLRequest=new URLRequest(url_array[evt.currentTarget.id]);
			navigateToURL(richiesta,"_blank");
		}
	}
}
Se guardi, ho creato un nuovo Array con dentro degli url ( che dovrai sostituire ) e devi aggiungerne tanti quante sono le MovieClip.
__________________

 


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

  #4 (permalink)  
Old 03-06-08, 10:24
Junior Member
 
Join Date: Jan 2008
Posts: 5
Rep Power: 0
marco_mar is on a distinguished road
Re: Mouse e proporzioni con Actionscript 3.0

Grazie Flep,
disponibile come al solito.... alla prossima
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #5 (permalink)  
Old 17-11-08, 01:11
Junior Member
 
Join Date: Nov 2008
Posts: 2
Rep Power: 0
glyph is on a distinguished road
Re: Mouse e proporzioni con Actionscript 3.0

Molto interessante,sono alle prime armi ma ho capito.
e' un po' che seguo i tuoi tutorial e gli spunti sul blog/sito.
Complimenti.
Mi piace il tuo approccio didattico.

Mi chiedevo essendo testardo due cose.

Mi piace questo slideshow e valorizza (almeno potrebbe) molto i lavori.
Mi occupo di graphic design e per quanto concerne il web utilizzo xhtml/css spesso e senza problemi.

Ora desideravo sviluppare un po' flash poche sicuramente ha ottime potenzialità.

Detto questo mi piacerebbe moltissimo che questo script facesse due cose per me fondamentali:

1. il rollover avvenisse al click.
2. le immagini al 100%.

Questo sito mi ha ispirato e vorrei lavorare in questa direzione:


http://www.wsdia.com/

Grazie.

Last edited by Onsitus; 17-11-08 at 10:17..
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

Flash Multi Gallery
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
mouse wheel ?!? nootropic.kint Actionscript 3.0 avanzato 3 19-11-08 17:45
Mouse and proportion with Actionscript 3.0 Flep Tutorials 40 17-11-08 05:05
FLVPlayback full screen - mantenere le proporzioni Eugene Componenti 0 02-09-08 19:48
[help] Mouse position 3di AIUTO utilità free 8 26-11-07 18:37
La proporzioni matematiche Flep Articoli e tutorials 0 19-09-07 13:37


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


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