Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

Accelerazione angolare e spinta

This is a discussion on Accelerazione angolare e spinta within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Abbiamo visto come applicare leggi fisiche ad Actionscript . Come ad esempio la spring , spring e frizione , spring con frizione e ...


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 02-10-08, 04:56
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Accelerazione angolare e spinta

Abbiamo visto come applicare leggi fisiche ad Actionscript.

Come ad esempio la spring, spring e frizione, spring con frizione e gravità.


In questo tutorial vedremo come applicare la accelerazione angolare e la spinta, molto utili per sviluppare giochi.


Utilizzo un piccolo aereoplano al quale associo 3 controlli tramite tastiera:



  • rotazione sinistra

  • rotazione destra

  • spinta


Clicca sull' SWF e premi i tasti della tastiera: sinistra, destra o su per comandare l' aereoplano








Creo un FLA che salvo con nome "main.fla".

Nello stage ho una istanza MovieClip con nome "airplane_mc".

Creo la Document Class, un file AS che salvo con nome "Main.a", implementata nel seguente modo:


Code:
package
{
	import flash.display.*;
	import flash.events.*;
	import flash.ui.*;
	
	public class Main extends MovieClip
	{
		private var rotational_velocity:int=0;
		private var thrust:Number=0;
		private var velocity_x:Number=0;
		private var velocity_y:Number=0;
		
		public function Main()
		{
			addEventListener(Event.ADDED_TO_STAGE,init);
		}
		
		private function init(evt:Event):void
		{
			removeEventListener(Event.ADDED_TO_STAGE,init);
			
			stage.frameRate=31;
			
			airplane_mc.addEventListener(Event.ENTER_FRAME,moveAirplane);
			stage.addEventListener(KeyboardEvent.KEY_DOWN,onDown);
			stage.addEventListener(KeyboardEvent.KEY_UP,onUp);
		}
		
		private function onDown(evt:KeyboardEvent):void
		{
			switch(evt.keyCode)
			{
				case Keyboard.LEFT :
				rotational_velocity=-5;
				break;
				
				case Keyboard.RIGHT :
				rotational_velocity=5;
				break;
				
				case Keyboard.UP :
				thrust=.2;
				break;
				
				default :
				break;
			}
		}
		
		private function onUp(evt:KeyboardEvent):void
		{
			rotational_velocity=0;
			thrust=0;
		}
		
		private function moveAirplane(evt:Event):void
		{
			evt.target.rotation+=rotational_velocity;
			var angle:Number=evt.target.rotation*Math.PI/180;
			var acceleration_x:Number=Math.cos(angle)*thrust;
			var acceleration_y:Number=Math.sin(angle)*thrust;
			velocity_x+=acceleration_x;
			velocity_y+=acceleration_y;
			evt.target.x+=velocity_x;
			evt.target.y+=velocity_y;
		}
	}
}

Aalizziamo il codice.


Proprietà

una variabile di tipo numerico che sarà la nostra accelerazione angolare

private var rotational_velocity:int=0;

una variabile di tipo numerico che sarà la nostra spinta

private var thrust:Number=0;

due variabili di tipo numerico che saranno la velocità sugli assi x e y.

private var velocity_x:Number=0;

private var velocity_y:Number=0;


Allaccio i listeners

uno che controlla l' aereoplano

airplane_mc.addEventListener(Event.ENTER_FRAME,mov eAirplane);

e gli altri due in ascolto dei tasti sinistra, destra e su della tastiera dell' utente

stage.addEventListener(KeyboardEvent.KEY_DOWN,onDo wn);

stage.addEventListener(KeyboardEvent.KEY_UP,onUp);


Metodi

onDown

Questo metodo controlla quale tasto della tastiera viene premuto associando dei valori di accelerazione angolare e spinta in base appunto al tasto premuto

switch(evt.keyCode)

{

case Keyboard.LEFT :

rotational_velocity=-5;

break;



case Keyboard.RIGHT :

rotational_velocity=5;

break;



case Keyboard.UP :

thrust=.2;

break;



default :

break;

}


onUp

riporto i valori di accelerazione angolare e spinta a zero

rotational_velocity=0;

thrust=0;


moveAirplane

Aumento la rotazione dell' aereo del valore di accelerazione angolare

evt.target.rotation+=rotational_velocity;

creo una variabile che contiene il valore in radianti dell' angolo di rotazione dell' aereoplano

var angle:Number=evt.target.rotation*Math.PI/180;

Creo le due accelerazioni in base al valore del seno e coseno dell' angolo

var acceleration_x:Number=Math.cos(angle)*thrust;

var acceleration_y:Number=Math.sin(angle)*thrust;


aggiungo le accelerazioni alle rispettive velocità

velocity_x+=acceleration_x;

velocity_y+=acceleration_y;


aggiungo le velocità alla x e y della MovieClip aereoplano

evt.target.x+=velocity_x;

evt.target.y+=velocity_y;


Allego i files sorgente:
Attached Files
File Type: zip AccelerazioneAngolare.zip (8.0 KB, 14 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 !
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
Effetto accelerazione con Flash CS3 Flep Articoli e tutorials 2 21-04-08 19:10


All times are GMT. The time now is 12:53.


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