. .
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 3

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

Die Welle

Hierfür schreiben wir uns eine eigene Effektklasse, die wir dann dann jeweils an die Bewegung der einzelnen Sphären haften können. Für den eigentlichen Effekt benötigen wir lediglich ein kleines Set an Filtern und BitmapData-Operationen. Als da wären:

  • ColorMatrixFilter
  • ConvolutionFilter
  • BlurFilter
  • paletteMap

Ausgestattet mit diesem Arsenal, können wir dann bereits anständige Wellen machen.

  1. var n:int = 256;
  2. var c:int;
  3. while (n--) {
  4. c = int( (Math.sin(n / 256 * Math.PI * 6) + 1) * 0x7f);
  5. this.waveArr.push((c << 16) | (c << 8) | c);
  6. }
  7. this.phongArr = setupPhongMap( 0xffffff, 20, 0x00aaff, 0x00000 );
  8. }
  9. private function setupPhongMap(
  10. specular:uint = 0xffffff,
  11. intense:int = 50,
  12. diffuse:uint=0x808080, ambient:uint=0x000000 ):Array {
  13. var colour:Array = [];
  14. var specR:int = (specular >> 16) & 0xff;
  15. var specG:int = (specular >> 8) & 0xff;
  16. var specB:int = specular & 0xff;
  17. var diffR:int = (diffuse >> 16) & 0xff;
  18. var diffG:int = (diffuse >> 8) & 0xff;
  19. var diffB:int = diffuse & 0xff;
  20. var ambR:int = (ambient >> 16) & 0xff;
  21. var ambG:int = (ambient >> 8) & 0xff;
  22. var ambB:int = ambient & 0xff;
  23. var i:int = 256;
  24. var iMax:Number;
  25. var iVal:Number;
  26. while (i--) {
  27. iMax = Math.pow(Math.cos(i / 256 * Math.PI / 2), intense);
  28. iVal = 1 - (i / 256);
  29. colour.push( (Math.min(0xff, ambR + iVal * diffR + iMax * specR) << 16)|
  30. (Math.min(0xff, ambG + iVal * diffG + iMax * specG) << 8) |
  31. (Math.min(0xff, ambB + iVal * diffB + iMax * specB))
  32. );
  33. }
  34. return colour;
  35. }
  36. public function onUpdateFrame(radius:Number,vx:Number,vy:Number,
  37. sleep:Boolean = false ):void {
  38. if ( !sleep ) {
  39. this.rootNode.scaleX = this.rootNode.scaleY = radius * .009;
  40. if ( vx < 250 ) {
  41. vx -= 20;
  42. } else {
  43. vx += 3;
  44. }
  45. if ( vy < 200 ) {
  46. vy -= 20;
  47. }
  48. this.rectShape.x = vx;
  49. this.rectShape.y = vy;
  50. this.canvas.draw(this.rootNode, new Matrix(1 / bmpScale, 0, 0, 1 / bmpScale, vx/30, vy/30));
  51. this.alpha_cnt = 20;
  52. for each(var flt:BitmapFilter in this.filterArr) {
  53. this.canvas.applyFilter(this.canvas, this.canvas.rect, pnt, flt);
  54. }
  55. this.waveMap.draw(this.canvas);
  56. this.waveMap.paletteMap(this.waveMap, this.waveMap.rect, pnt, this.waveArr, RANGE, RANGE);
  57. var n:int = 1;
  58. while (n--){ this.waveArr.push(this.waveArr.shift())
  59. }
  60. this.waveMap.applyFilter(this.waveMap, this.waveMap.rect, pnt, this.bvl);
  61. this.waveMap.paletteMap(
  62. this.waveMap, this.waveMap.rect, pnt, this.phongArr, RANGE, RANGE);
  63. } else {
  64. if ( alpha_cnt < alpha_range ) {
  65. this.canvas.colorTransform(
  66. this.canvas.rect, new ColorTransform(0,0,0,0,0,0,0,-this.alpha_cnt ) );
  67. this.waveMap.draw(this.canvas);
  68. this.waveMap.paletteMap(
  69. this.waveMap,this.waveMap.rect,pnt,this.waveArr,RANGE, RANGE);
  70. this.waveMap.applyFilter(this.waveMap, this.waveMap.rect,pnt, this.bvl);
  71. this.waveMap.paletteMap(
  72. this.waveMap, this.waveMap.rect, pnt, this.phongArr, RANGE, RANGE);
  73. this.alpha_cnt += 20;
  74. }
  75. }
  76. }
  77. }
  78. }

 

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