Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

Animazioni con Flash CS3 - spring e frizione

This is a discussion on Animazioni con Flash CS3 - spring e frizione within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Questo articolo è il proseguimento dell' articolo in cui abbiamo visto come applicare l' effetto spring con Actionscript 3.0 . ...


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 20-09-07, 10:11
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Animazioni con Flash CS3 - spring e frizione


Questo articolo è il proseguimento dell' articolo in cui abbiamo visto come applicare l' effetto spring con Actionscript 3.0 .

Per chi non avesse ancora letto Animazioni con Actionsctipt 3.0 - the spring, consiglio di dargli un' occhiata in modo da poter capire meglio questo articolo.

Con l' esempio della spring, il mio oggetto andava in loop da destra a sinistra con un senso oscillatorio.

Adesso vediamo come diminuire sempre di più l'oscillazione fino a fermare l' oggetto.


Ecco come...


Primo caso:

creo un FLA e lo salvo con nome ' spring_1.fla '

creo una qualsiasi MovieClip e gli assegno nome istanza ' clip_mc '
creo la Document Class, un file AS che salvo con nome ' SpringAndFrizione.as ', così implementata:

Code:
package
{
	import flash.display.MovieClip;
	import flash.display.SimpleButton;
	import flash.events.Event;
	import flash.events.MouseEvent;
	
	public class SpringAndFrizione extends MovieClip
	{
		private const spring:Number=.1;
		private const frizione:Number=.9;
		private var centro:Number;
		private var vel_x:Number=0;

		public function SpringAndFrizione()
		{
			init();
		}
		
		private function init():void
		{
			stage.frameRate=31;
			
			addButtonListener();
			
			centro=stage.stageWidth/2;
			
			clip_mc.x=-200;
			clip_mc.y=stage.stageHeight/2;
			clip_mc.addEventListener(Event.ENTER_FRAME,muovi);
		}
		
		private function addButtonListener():void
		{
			replay_btn.addEventListener(MouseEvent.MOUSE_DOWN,redo);
		}
		
		private function muovi(e:Event):void
		{
			var acc_x:Number=(centro-e.target.x)*spring;
			vel_x+=acc_x;
			vel_x*=frizione;
			e.target.x+=vel_x;
		}
		
		private function redo(m:MouseEvent):void
		{
			clip_mc.removeEventListener(Event.ENTER_FRAME,muovi);
			vel_x=0;
			clip_mc.x=-200;
			clip_mc.addEventListener(Event.ENTER_FRAME,muovi);
		}
	}
}
Risultato:











Secondo caso:
creo un FLA e lo salvo con nome ' spring_1_a.fla '
creo un campo di testo con del testo a piacere.
Utilizzando il comando da tastiera CTRL+B divido il campo di testo in altrettanti campi per quante sono le lettere
converto ogni campo di testo in MovieClip e gli assegno i nomi clip_0_, clip_1_mc, clip_2_mc ecc ecc
creo la Document Class, un file AS che salvo con nome ' SpringAndFrizione_a.as ', così implementata:
Code:
package
{
	import flash.display.MovieClip;
	import flash.utils.Timer;
	import flash.events.Event;
	import flash.events.TimerEvent;
	
	public class SpringAndFrizione_a extends MovieClip
	{
		private var clips_array:Array;
		
		private const spring:Number=.1;
		private const frizione:Number=.85;
		private var centro:Number;
		
		private var timer:Timer;
		
		private var t_e:TimerEvent;

		public function SpringAndFrizione_a()
		{
			init();
		}
		
		private function init():void
		{
			stage.frameRate=31;
			
			clips_array=new Array(clip_0_mc,clip_1_mc,clip_2_mc,clip_3_mc,clip_4_mc,
			clip_5_mc,clip_6_mc,clip_7_mc,clip_8_mc,clip_9_mc);
			
			for(var i:int=0;i < clips_array.length;i++)
			{
				clips_array[i].y=-200;
				clips_array[i].vel_y=0;
			}
			
			centro=stage.stageHeight/2;
			
			startTimer(t_e);
		}
		
		private function callStartTimer():void
		{
			timer=new Timer(7000,1);
			timer.addEventListener(TimerEvent.TIMER,startTimer);
			timer.start();
		}
		
		private function removeListeners():void
		{
			for(var i:int=0;i < clips_array.length;i++)
			{
				clips_array[i].removeEventListener(Event.ENTER_FRAME,muovi);
				clips_array[i].y=-200;
				clips_array[i].vel_y=0;
			}
		}
		
		private function startTimer(t:TimerEvent):void
		{
			removeListeners();
			
			timer=new Timer(100,clips_array.length);
			timer.addEventListener(TimerEvent.TIMER,go);
			timer.addEventListener(TimerEvent.TIMER_COMPLETE,finito);
			timer.start();
		}
		
		private function go(t:TimerEvent):void
		{
			clips_array[timer.currentCount-1].addEventListener(Event.ENTER_FRAME,muovi);
		}
		
		private function muovi(e:Event):void
		{
			var acc_y:Number=(centro-e.target.y)*spring;
			e.target.vel_y+=acc_y;
			e.target.vel_y*=frizione;
			e.target.y+=e.target.vel_y;
		}
		
		private function finito(t:TimerEvent):void
		{
			callStartTimer();
		}
	}
}
Risultato:










Analizziamo il codice:

in entrambi i casi, la base dello script è identica a quello dell' articolo sull' effetto spring,

in questo caso aggiungo il valore ' frizione ' , un valore costante che viene utilizzato per rallentare fino a fermare la spring.

E' più facile da fare che da spiegare :P



Focalizziamoci sui metodi muovi() del primo e secondo caso:



solo con la spring, il codice era questo

applico l' inerzia ( vedi articolo effetto inerzia )

var acc_x:Number=(center-sprite.x)*spring;

aggiungo l' inerzia al valore della variabile velocità ( vel_x )

vel_x+=acc_x;

aggiungo la velocità alla X dell' oggetto che voglio muovere

sprite.x+=vel_x;



aggiungendo la frizione, il codice diventa questo:

applico l' inerzia

var acc_x:Number=(centro-e.target.x)*spring;

aggiungo l' inerzia al valore della variabile velocità ( vel_x )

vel_x+=acc_x;

moltiplico il valore di vel_x per il valore della frizione ( in questo caso la frizione è 0.9, quindi sarebbe come dire diviso 9 )

vel_x*=frizione;

aggiungo la velocità alla X dell' oggetto che voglio muovere

e.target.x+=vel_x;



NB: Nel secondo caso, non ho più una singola variabile che determina la velocità ( vel_x ), ma necessito che ogni MovieClip abbia la propria velocità quindi assegno una proprietà in runtime alla MovieClip (MovieClip.vel_x )



Buon divertimento !

__________________

 


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 27-04-08, 21:31
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: Animazioni con Flash CS3 - spring e frizione

immagino che per il primo esempio almeno (devo ancora studiare il secondo in questo articolo) rimanga attivo il comando

addEventListener....ecc...., se uno non tocca mai il pulsante, anche se tutto rimane fermo

come si potrebbe rimuovere una volta che la clip si è fermata al centro senza toccare il pulsante?

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

  #3 (permalink)  
Old 27-04-08, 23:50
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: Animazioni con Flash CS3 - spring e frizione

nel secondo esempio, qualcuno sa dirmi perchè con vel_y ho bisogno di una variabile in RunTime per ogni clip, ma per acc_y invece questo non è necessario?

Ah, poi ho provato a cancellare

clips_array[i].vel_y=0;

dalla funzione init(), e il risultato rimane inalterato.....

GRAZIE DELLA PAZIENZA.......e scusate
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
Animazioni con Flash CS3 - spring frizione e gravità Flep Articoli e tutorials 3 03-07-08 17:11
Animazioni con Flash CS3 - spring su 3 punti Flep Articoli e tutorials 0 20-09-07 14:24
Animazioni con Flash CS3 - spring e frizione + mouse Flep Articoli e tutorials 0 20-09-07 13:22
Animazioni con Flash CS3 - the spring Flep Articoli e tutorials 0 19-09-07 15:58
Animazioni con Flash CS3 - spring frizione e gravità zakwer Actionscript 3.0 avanzato 1 10-09-07 10:12


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


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