Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

Rotazione di coordinate e collisioni in superfici angolate con Flash CS3

This is a discussion on Rotazione di coordinate e collisioni in superfici angolate con Flash CS3 within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Salve a tutti ! Questo tutorial č l' ingresso nel campo dell' effettistica avanzata applicata a Flash CS3 tramite 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
  5 links from elsewhere to this Post. Click to view. #1 (permalink)  
Old 27-11-07, 06:23
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Rotazione di coordinate e collisioni in superfici angolate con Flash CS3

Salve a tutti !

Questo tutorial č l' ingresso nel campo dell' effettistica avanzata applicata a Flash CS3 tramite Actionscript 3.0 .
Abbiamo visto come ruotare le coordinate di una MovieClip utilizzando una formula trigonometrica.

Ora andremo a vedere come ruotare un intero sistema di coordinate.
Vi sarā capitato di sicuro di dover intercettare una collisione tra due MovieClip come ad esempio una pallina ed una superficie orizzontale o verticale.
Abbiamo visto come poterlo fare nel tutorial che spiega come fare rimbalzare una pallina.
Cosa succederebbe se la suprficie non fose pių orizzontale ma fosse angolata ? Sė, avete capito bene... in discesa tanto per capirci.
Come poter simulare la situazione fisica di come se nella realtā prendessimo una pallina e la facessimo rimbalzare contro una superficile angolata tipo una discesa oppure un muro con 45° di rotazione ?

Ecco che la cosa diventa assai ardua e nč le formule utilizzate fino ad ora, nč tanto meno il metodo hitTestObject potrebbero risolvere il nostro problema.
E allora come fare ?
La risposta č una sola, ruotare le coordinate del sistema, applicare il rimbalzo e riportare le coordinate del sistema allo stato iniziale.






Creo un FLA che salvo con nome ' trigonometria7.fla '.
Al suo interno disegno una linea orizzontale, la trasformo in MovieClip e gli assegno nome istanza line_mc.
Creo ora un' altra MovieClip con forma circolare come fosse una pallina e gli assegno nome istanza ball_mc.

Ora creo un altro livello, apro il pannello azioni e scrivo:
Code:
line_mc.rotation=20;

var vx:Number=0;
var vy:Number=0;
const GRAVITY:Number=.5;
const BOUNCE:Number=-.7;
var angle:Number=(line_mc.rotation/180)*Math.PI;

addEventListener(Event.ENTER_FRAME,go);

function go(evt:Event):void
{
	vy+=GRAVITY;
	ball_mc.x+=vx;
	ball_mc.y+=vy;
	
	var sine:Number=Math.sin(angle);
	var cosine:Number=Math.cos(angle);
	
	var xx:Number=ball_mc.x-line_mc.x;
	var yy:Number=ball_mc.y-line_mc.y;
	
	var x1:Number=cosine*xx+sine*yy;
	var y1:Number=cosine*yy-sine*xx;
	
	var vx1:Number=cosine*vx+sine*vy;
	var vy1:Number=cosine*vy-sine*vx;
	
	if(y1>-ball_mc.height/2)
	{
		y1=-ball_mc.height/2;
		
		vy1*=BOUNCE;
	}
	xx=cosine*x1-sine*y1;
	yy=cosine*y1+sine*x1;
	vx=cosine*vx1-sine*vy1;
	vy=cosine*vy1+sine*vx1;
	
	ball_mc.x=line_mc.x+xx;
	ball_mc.y=line_mc.y+yy;
}
Analizziamo il codice

assegno una rotazione a line_mc di 20°
creo due variabili in cui inserisco i valori delle velocitā della x e della y
var vx:Number=0;
var vy:Number=0;
una costante che contiene il valore della gravitā
const GRAVITY:Number=.5;
una costante che contiene il valore dell' altezza del rimbalzo
const BOUNCE:Number=-.7;
una variabile che contiene il valore in radianti della rotazione di 20° applicata a line_mc
var angle:Number=(line_mc.rotation/180)*Math.PI;

aggiungo un ENTER_FRAME che chiama la funzione go
addEventListener(Event.ENTER_FRAME,go);

Nella funzione go:
aumento progressivamente la velocitā sull' asse y di ball_mc aggiungendogli la costante GRAVITY
vy+=GRAVITY;
do in pasto alle proprietā x e y di ball_mc i valori delle velocitā ( vx e vy )
ball_mc.x+=vx;
ball_mc.y+=vy;
creo due variabili che contengono rispettivamente il seno e coseno dell' angolo che abbiamo come valore nella variabile angle
var sine:Number=Math.sin(angle);
var cosine:Number=Math.cos(angle);
creo due variabili che contengono le distanze tra la x e la y di ball_mc e line_mc
var xx:Number=ball_mc.x-line_mc.x;
var yy:Number=ball_mc.y-line_mc.y;
applico la formula di rotazione che abbiamo visto nel tutorial di trigonometria 6 e quindi ruoto le coordinate del sistema
var x1:Number=cosine*xx+sine*yy;
var y1:Number=cosine*yy-sine*xx;
applico la stessa formula di rotazione anche per le velocitā ( in matematica/fisica sarebbe come cambiare la direzione di un vettore )
var vx1:Number=cosine*vx+sine*vy;
var vy1:Number=cosine*vy-sine*vx;
applico le collisioni ed il rimbalzo
if(y1>-ball_mc.height/2)
{
y1=-ball_mc.height/2;

vy1*=BOUNCE;
}
riporto le coordinate del sistema allo stato iniziale
xx=cosine*x1-sine*y1;
yy=cosine*y1+sine*x1;
vx=cosine*vx1-sine*vy1;
vy=cosine*vy1+sine*vx1;
assegno i valori di xx e yy rispettivamente alla x e y di ball_mc
ball_mc.x=line_mc.x+xx;
ball_mc.y=line_mc.y+yy;

Alla prossima !
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
Problemi di Rotazione!!! seal Actionscript 3.0 base 14 15-04-08 10:11
drag inerzia e rotazione lorenzz Actionscript 3.0 avanzato 0 12-03-08 17:04
Collisioni Multiple tra Clip StefanoV Actionscript 3.0 avanzato 1 29-02-08 08:20
Collisioni multiple su superfici angolate Flep Articoli e tutorials 0 06-12-07 06:34
Collisioni con Actionscript 3.0 - esempio 1 Flep Articoli e tutorials 0 21-09-07 09:12


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


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