Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

Inerzia con Flash CS3

This is a discussion on Inerzia con Flash CS3 within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Spesso vi sarà capitato di vedere animazioni o effetti che simulano leggi fisiche o matematiche con Actionscript. Quello che voglio ...


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 19-09-07, 14:36
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Inerzia con Flash CS3

Spesso vi sarà capitato di vedere animazioni o effetti che simulano leggi fisiche o matematiche con Actionscript.
Quello che voglio introdurre è un capitolo che sarà molto lungo e non sempre semplice da capire.
Seguite gli articoli che verranno perchè ne vedremo delle belle !

Dunque, partiamo...

Il primo effetto che è bene imparare è il così chiamato ' movimento inerziale ' .
In poche parole si tratta di quelle animazioni che partono veloci e rallentano sempre di più fino a fermarsi al punto finale.
Chiaramente mi riferisco ad animazioni di movimento/spostamento di oggetti con Actionscript, ma questo effetto è applicabile anche ad altre proprietà come ad esempio l' alpha o la rotazione.

Entriamo nel sodo:
creo un FLA e lo salvo con nome ' inerzia.fla ' e poi creo la Document class con un file AS che salvo con nome ' Inerzia.as '.
Eccola:
Code:
package 
{
	import flash.display.Sprite;
	import flash.display.SimpleButton;
	import flash.events.Event;
	import flash.events.MouseEvent;
	
	public class Inerzia extends Sprite
	{
		private var quadrato:Sprite;
		private var arrivo:int=400;
		
		public function Inerzia()
		{
			stage.frameRate=31;
			
			creaSprite();
			initQuadratoListener();
			initBottoneListener();
		}
		
		private function creaSprite():void
		{
			quadrato=new Sprite();
			quadrato.graphics.beginFill(0xFF0066);
			quadrato.graphics.drawRect(100,100,50,50);
			quadrato.graphics.endFill();
			addChild(quadrato);
		}
		
		private function initQuadratoListener():void
		{
			quadrato.addEventListener(Event.ENTER_FRAME,muoviQuadrato);
		}
		
		private function initBottoneListener():void
		{
			riprova_btn.addEventListener(MouseEvent.MOUSE_DOWN,replay);
		}
		
		private function muoviQuadrato(e:Event):void
		{
			var distanza:Number=arrivo-quadrato.x;
			var inerziale:Number=distanza*.1;
			quadrato.x+=inerziale;
			if(Math.abs(distanza)<=.5)
			{
				quadrato.x=arrivo;
				quadrato.removeEventListener(Event.ENTER_FRAME,muoviQuadrato);
			}
		}
		
		private function replay(m:MouseEvent):void
		{
			quadrato.removeEventListener(Event.ENTER_FRAME,muoviQuadrato);
			quadrato.x=0;
			initQuadratoListener();
		}
	}
}
Risultato:










Da notare che la classe estende la classe Sprite e non la MovieClip semplicemente perchè riduco la memoria e non importo la classe MovieClip ma solo la Sprite.
Se le MovieClip vengono disegnate ' a mano ' nel FLA allora la classe dovrà estendere la MovieClip class.
Cosa faccio:
- creo una variabile con nome ' arrivo '
- disegno una semplice Sprite di forma quadrata e la imposto ad una certa X e Y.
- aggiungo i listeners ( in questo caso c'è anche un listener per il bottone ' riprova ' )
- faccio partire un intervallo ( ENTER_FRAME ) La variabile ' distanza ' è sempre la differenza tra il punto di arrivo ( il valore della variabile ' arrivo ' ) e la x della Sprite.
La variabile ' inerziale ' divide la distanza in 10, cioè: dire *.1 equivale a dire /10
Ricordiamoci sempre che dobbiamo interrompere l'intervallo quando la Sprite raggiunge il punto di arrivo o avremo un intervallo sempre attivo con conseguenze sulla CPU dell'utente.
Quindi fermo l'intervallo quando il valore della variabile ' distanza ' è minore o uguale a 0.5 .

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

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
drag inerzia e rotazione lorenzz Actionscript 3.0 avanzato 0 12-03-08 17:04
Inerzia multipla con Flash CS3 Flep Articoli e tutorials 0 20-09-07 14:55


All times are GMT. The time now is 10:42.


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