Advertisement
spanvega

SINE_MESHBATCH

Nov 6th, 2016
293
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package
  2. {
  3.     import flash.display.Sprite;
  4.     import starling.core.Starling;
  5.  
  6.     public class SINE_MESHBATCH extends Sprite
  7.     {
  8.         public function SINE_MESHBATCH ()
  9.         {
  10.             with (stage) { frameRate = 60; color = 0x0; align = 'TL'; scaleMode = 'noScale'; }
  11.  
  12.             var starling : Starling = new Starling (Spiral, stage); // starling 2.1
  13.             starling.showStats = true;
  14.             starling.start ();
  15.         }
  16.     }
  17. }
  18.  
  19.  
  20. import flash.geom.Matrix;
  21. import starling.display.*;
  22. import starling.events.Event;
  23. import starling.core.Starling;
  24.  
  25. /**  @author SPANVEGA // CHRISTIAN  **/
  26.  
  27. final class Spiral extends Sprite
  28. {
  29.     private var quad : Quad;
  30.  
  31.     private var batch : MeshBatch;
  32.  
  33.     private var angle  : Number = 0,
  34.                 radius : Number = 0;
  35.  
  36.     private var m : Matrix = new Matrix ();
  37.  
  38.     private var fx : Number, fy : Number, // from
  39.                 tx : Number, ty : Number, // to
  40.  
  41.                 cx : Number, cy : Number; // center
  42.  
  43.  
  44.     public function Spiral ()
  45.     {
  46.         quad = new Quad (1, 1, 0xFFFFFF);
  47.         quad.alignPivot ();
  48.  
  49.         addChild (batch = new MeshBatch ());
  50.  
  51.         cx = Starling.current.stage.stageWidth  >> 1;
  52.         cy = Starling.current.stage.stageHeight >> 1;
  53.  
  54.         addEventListener (Event.ENTER_FRAME, update);
  55.     }
  56.  
  57.     private function update (e : Event) : void
  58.     {
  59.         tx = Math.sin (toRadians (angle)) * radius;
  60.         ty = Math.cos (toRadians (angle)) * radius;
  61.  
  62.         //
  63.  
  64.         var q : Quad = line (quad, fx, fy, tx, ty);
  65.         // offset to center
  66.             q.x += cx;
  67.             q.y += cy;
  68.  
  69.         batch.addMesh (q);
  70.  
  71.         //
  72.  
  73.         fx = tx, fy = ty;
  74.  
  75.         angle  += 5.0;
  76.         radius += 0.3;
  77.     }
  78.  
  79.     private function toRadians (degrees : Number) : Number
  80.     {
  81.         return degrees * Math.PI / 180
  82.     }
  83.  
  84.     private function line (quad : Quad, fx : Number, fy : Number, tx : Number, ty : Number) : Quad
  85.     {
  86.         var dx : Number = tx - fx,
  87.             dy : Number = ty - fy,
  88.             ds : Number = Math.sqrt (dx * dx + dy * dy);
  89.  
  90.         var a : Number, b : Number, c : Number, d : Number,
  91.             sin : Number, cos : Number, rad : Number;
  92.  
  93.         // scale
  94.         a = ds;
  95.  
  96.         // identity
  97.         b = 0;
  98.         c = 0;
  99.         d = 1;
  100.  
  101.         // rotate
  102.         rad = Math.atan2 (dy, dx);
  103.         sin = Math.sin (rad);
  104.         cos = Math.cos (rad);
  105.  
  106.         m.a  = a * cos - b * sin;
  107.         m.b  = a * sin + b * cos;
  108.         m.c  = c * cos - d * sin;
  109.         m.d  = c * sin + d * cos;
  110.  
  111.         // translate
  112.         m.tx = fx;
  113.         m.ty = fy;
  114.  
  115.         //
  116.  
  117.         quad.transformationMatrix = m;
  118.  
  119.         return quad;
  120.     }
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement