. .
CREATE OR DIE Special Downloads Shop webinale

Schauplatz

Artikel
  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

April 2009

Flash AS3, Box2D und PV3D


Fortsetzung, Teil 2

(Link zum Artikel: http://www.createordie.de/cod/artikel/2265)

Ich glaub, es hat sich gerade bewegt...

Und ehe man sich versieht, hat man die kompletten Rahmenbedingungen geschaffen und kann das Ganze auch schon mit Leben füllen. Dazu erweitern wir o. g. Funktion launch() lediglich noch um eine weitere Zeile...

  1. public function launch():void {
  2. setupPV3D ();
  3. setupWorld();
  4. setupFloor();
  5. setupCeiling();
  6. setupWalls();
  7. setupShapes();
  8. ///////////////////////////////
  9. // kurz erweitert…
  10. ///////////////////////////////
  11. addEventListener( Event.ENTER_FRAME,
  12. onUpdateFrame);
  13. }

...und können nun unsere Welt in Bewegung setzen:

  1. ///////////////////////////////////
  2. // onUpdateFrame
  3. ///////////////////////////////////
  4. public function onUpdateFrame( e:Event ):void {
  5. var vx:Number,vy:Number,ox:Number,oy:Number;
  6. var i :int = 0;
  7. ox = 120 + Math.cos( this.sx ) * 120;
  8. oy = 140 + Math.sin( this.sy ) * 140;
  9. this.sx += this.rndX;
  10. this.sy += this.rndY;
  11. vx = ox;
  12. vy = oy;
  13. if ( gx < vx ) {
  14. mainBody.m_linearVelocity.x -= .2
  15. } else {
  16. mainBody.m_linearVelocity.x += .2
  17. }
  18. if ( gy < vy ) {
  19. mainBody.m_linearVelocity.y -= .2
  20. } else {
  21. mainBody.m_linearVelocity.y += .2
  22. }
  23. gx = vx;
  24. gy = vy
  25. i = 1;
  26. for (var bb:b2Body = world.m_bodyList; bb; bb = bb.m_next ) {
  27. var getName:String = bb.m_userData.name + i;
  28. if ( getName != "Sphere1" ) {
  29. bb.m_userData.x = bb.GetPosition().x*wScale-w*.5;
  30. bb.m_userData.y = -bb.GetPosition().y*wScale+h*.5;
  31. var distance:Number = Math.sqrt( bb.m_linearVelocity.x *
  32. bb.m_linearVelocity.x + bb.m_linearVelocity.y * bb.m_linearVelocity.y);
  33. var rotationAxis:Number3D = Number3D.cross(
  34. new Number3D(bb.m_linearVelocity.x, bb.m_linearVelocity.y, 0), FORWARD);
  35. rotationAxis.normalize();
  36. var rotationMatrix:Matrix3D = Matrix3D.rotationMatrix(rotationAxis.x,
  37. -rotationAxis.y, rotationAxis.z, distance/30);
  38. bb.m_userData.transform.calculateMultiply3x3(
  39. rotationMatrix, bb.m_userData.transform);
  40. /*
  41. if ( i < 3 ) {
  42. i++;
  43. }
  44. var currWave:WaveTest = this["waves" + i];
  45. if ( bb.m_linearVelocity.x > 0.2 || bb.m_linearVelocity.x < -0.2 ||
  46. bb.m_linearVelocity.y > 0.2 || bb.m_linearVelocity.y < -0.2 ) {
  47. currWave.onUpdateFrame( radians[i], viewport.containerSprite.x + bb.m_userData.x -214, viewport.containerSprite.y- bb.m_userData.y-122 );
  48. } else {
  49. currWave.onUpdateFrame( radians[i], viewport.containerSprite.x + bb.m_userData.x -214, viewport.containerSprite.y- bb.m_userData.y-122, true );
  50. }
  51. */
  52. }
  53. }
  54. renderer.renderScene(scene, camera, viewport);
  55. world.Step(timeStep, iterations);
  56. }

Wie man sieht, ist auch dies schnell erledigt. An dieser Stelle könnte man eigentlich den Griffel fallen lassen und sich dem Müßiggang hingeben. Viel interessanter wirkt das gesamte Szenario aber, wenn man der Spielerei noch einen feinen visuellen Effekt mit auf den Weg gibt.

Hier sind der eigenen Kreativität natürlich keine Grenzen gesetzt! Es soll für den Moment aber reichen, wenn wir jeder der fröhlich durch die Gegend kugelnden Sphären eine Bugwelle mitgeben, die wir ihr als Effekt zuordnen.

 

Kommentare
Gravatar Freddixx 07.12.2009
um 17:11 Uhr
Hallo,
eines der wenigen Tutorials, die zeigen, wie man in einer 3D-Flash-Umgebung 2D-Physik verwenden kann.

Allerdings für Beginner so gut wie wertlos, weil: mangelhaft dokumentiert.

Vielleicht sollte hier doch mal etwas Zeit für das Kommentieren der einzelnen Codeblöcke aufgewandt werden. Dann wird auch verständlich, was du eigentlich vorhast.

lg, Fred
#zitieren
Neuer Kommentar
  • Gute Kommentare werden belohnt.
  •   (optional)
  •   (Kommentar abonnieren/Gravatar - wird nicht veröffentlicht)
  •    Benachrichtige mich bei nachfolgenden Kommentaren per E-Mail
  • -+
Tags
Werbung