E-learn.ro
Panou utilizatori
Utilizator Parola
Creeaza cont nou    Recupereaza parola
Login
Newsletter
Introdu adresa ta de email
Inscrie-te
Inchide panoul de utilizatori
Add to Google

Tutoriale Adobe Flash

Descarca toolbar

Toolbar E-learn.ro Facebook Twitter

GRAFICA 2D  /  Adobe Flash  /  ActionScript (14)

Simularea gravitatiei in flash

04.11.2008
Simularea gravitatiei in flash

Pentru a realiza simularea gravitatiei in flash se recurge la modificari ale legilor fizicii, la rezolvarea de ecuatii si la scripting.

Total vizualizari: 7576 7576 afisari   |   Comentarii  0   |   Rating   |   (3 voturi)   |   Timp necesar: 35 min 35 min   |   Nivel de cunostiinte necesar: Avansat  Avansat

Sursa:  www.prodevtips.com  
Autor:  www.prodevtips.com
Download
Adauga la tutoriale favorit Adauga la tutoriale favorite
Pagina:
« 1 2
comenteaza printeaza

In AdvObj vei avea:

function simulate(){ 
  this.speedMe(); 
  this.moveMe(); 
  this.drawMe(); 
} 
 
function drawMe(){ 
  this.setVpos(this.curPoint); 
} 
 
function moveMe(){ 
  this.ctrlPoint.inc(this.speed); 
  this.curPoint.inc(this.speed); 
} 
 
function speedMe(){ 
  this.speed.inc(this.acc); 
} 
 
function accMe(a:V2D){ 
  this.acc.inc(a);

Simularea incepe cu o marire a vitezei ca functie de acceleratie, apoi deplasezi obiectul in functie de viteza, neluand in considerare faptul ca ai de a face cu doua puncte: ctrlPoint si curPoint. In unele situatii "curPoint" e folosit drept pozitia adevarata a obiectului, in timp ce "ctrlPoint" functioneaza ca centru al "sistemului". Acest lucru va permite catorva affectori sa-i cauzeze obiectului eccentricitate.

drawMe() muta movieclip-ul obiectului la pozitia indicata in cerinta moveMe().

Sa ne intoarcem la limitarea vitezei controlata de lengthTo() in V2D:

function lengthTo(limit:Number){ 
  var l = this.length(); 
  var dl =  Math.abs(l - limit); 
  var dx = HSMath.lengthChangeToSide(dl, l, this.x); 
  var dy = HSMath.lengthChangeToSide(dl, l, this.y); 
  if(limit < l){ 
    this.x -= HSMath.getNegPos(this.x) * dx; 
    this.y -= HSMath.getNegPos(this.y) * dy; 
  }else{ 
    this.x += HSMath.getNegPos(this.x) * dx; 
    this.y += HSMath.getNegPos(this.y) * dy; 
  } 
}

Mai intai obtii lungimea adevarata a vectorului si calculezi difference in length (dl) - diferenta de marime. Dificultatea consta in a determina cu cat sa micsorezi componenta xy, deoarece nu o poti descreste cu 30% sa zicem, atata timp cat se presupune ca lungimea vectorului se descreste cu acea cantitate. Daca faci asta, va rezulta o valoare gresita.

Ca sa scurtez explicatia, valorile dx si dy au legatura cu sistemul original, oferindu-ti cateva ecuatii pe care le poti asocia cu variabile cunoscute. Din moment ce ai mai multe ecuatii, poti face o substitutie a variabilei dintr-una in cealalta pentru a obtine o ecuatie cu o singura necunoscuta, de exemplu dx. Solutia se afla in HSMath.lengthChangeToSide():

static function lengthChangeToSide(dl:Number, l:Number, side:Number):Number{ 
  var roof = Math.pow(side, 2) * Math.pow(dl, 2); 
  var cellar = Math.pow(l, 2) * (dl + 2 * Math.pow(side, 2)); 
  return Math.sqrt(roof / cellar); 
}

Se poate reduce si mai mult, dar tu ai nevoie de rezultate rapide. Side-ul reprezinta valoarea originala x sau y, l este lungimea originala (ipotenuza), iar dl valoarea cu care l va fi schimbat.

Functia getNegPos este egala cu -1 daca argumentul e negativ, cu 1 daca e pozitiv si cu 0 daca e 0 si o folosesti pentru a sti daca trebuie sa utilizezi sau nu o valoare negativa cu care sa adaugi/scazi. Daca, de exemplu, limita e mai mica decat lungimea trebuie sa scazi,dar daca socotesti cu -5 - -4, ceea ce ar fi posibil daca vectorul indica spre stanga, obtii -9, ceea ce nu e bine deoarece getNegPos ar rezulta -5 - -4, fiind mult mai bine intrucat ai obtine -1, o reducere a lungimii.

In acest tutorial au fost discutate cele mai importante amanunte in legatura cu simularea gravitatiei, dar esti liber sa explorezi pe cont propriu.

Pagina:
« 1 2
comenteaza printeaza
Alte tutoriale Adobe Flash:
Noteaza acest tutorial
Rating tutorial
 
(3 voturi)
Pentru a nota acest tutorial, trebuie sa fii logat!
Posteaza un comentariu
Pentru a posta un comentariu, trebuie sa fii logat!
0 TOP UTILIZATORI* 0 0
Tutoriale scrise de claibornelara
claibornelara Rang utilizator claibornelara - Incepator
4800
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
4735
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
4610
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
4545
Tutoriale scrise de beacherrosa
beacherrosa Rang utilizator beacherrosa - Incepator
4405
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
PHP HTML Fireworks Javascript Bridge Sony Vegas MySQL PSD JSON Powerpoint SWF Python SEO StyleSheet CSS Outlook Word Swift 3D Photoshop COREL DRAW Lightroom Java Ruby on Rails Flash XHTML Illustrator Verilog XML Excel RoR Fotografie Dreamweaver AJAX Action Script Vista Gimp
Promovare:
Daca faci parte din comunitatea E-learn.ro si doresti promovarea acesteia, poti accesa pagina de promovare.
Arhiva newsletter:
Daca ai ratat un numar mai vechi, sau vrei sa revezi care au fost noutatile E-learn.ro la un moment dat, poti accesa arhiva de newslettere.
  Copyright © 2008-2013 E-LEARN.ro. Toate drepturile rezervate. Termeni si conditii.
Conceput si realizat de Neokinetics Software