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: 7663 7663 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
5060
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
5015
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
4855
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
4835
Tutoriale scrise de beacherrosa
beacherrosa Rang utilizator beacherrosa - Incepator
4630
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
SEO PSD XHTML Bridge Photoshop Javascript Ruby on Rails Flash MySQL Python XML Verilog Java Dreamweaver COREL DRAW CSS Excel Illustrator PHP Gimp Sony Vegas HTML RoR Fireworks Word Lightroom Action Script AJAX Vista Outlook Powerpoint SWF Fotografie StyleSheet Swift 3D JSON
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