// Flash10 actionscript3.0, test for graphics.drawPath // Petri Leskinen, leskinen[dot]petri[at]luukku[dot]com // Espoo, Finland, June 2008 package { import flash.display.Sprite; import flash.display.BitmapData; import flash.text.TextField; import flash.utils.getTimer; import flash.geom.Point; import flash.geom.Rectangle; import flash.display.GraphicsPathCommand; import flash.events.Event; // [SWF(backgroundColor="0xFFFFFF", frameRate="31")] public class GraphicsPathTest2 extends Sprite { public var n:int =512; // width for this public var perlinData:BitmapData; public var po:Array= [new Point(), new Point(), new Point()]; private var _commands:Vector. = new Vector.(); private var _dataUint:Vector.; private var _dataVector:Vector.; private var txt:TextField; private var i:int; public function GraphicsPathTest2() { // It's enough to define _commands once // The command serie starts with MOVE_TO, // All the following commands are LINE_TO _commands.push(GraphicsPathCommand.MOVE_TO); for (i=1 ; i!=n+n; i++) { _commands.push(GraphicsPathCommand.LINE_TO); } // We use a bitmap only 2 pixels high perlinData = new BitmapData(n,2,false); // txt for Timer txt = new TextField(); txt.textColor =0xFF000000; txt.y = 10; addChild(txt); // ready to go upDate(new Event(Event.RENDER)); addEventListener(Event.ENTER_FRAME, upDate); } private function upDate(e:Event):void { // Animating perlinNoise po[0].y += 0.03; po[1].y -= 0.01; po[2].y += 0.0112510; perlinData.perlinNoise(n/3,1,3,13, true,true,4,false, po); var startT:Number = getTimer(); //for (var j:int=0; j!=100; j++) { // for time testing // BitmapData.getVector returns the values as uints 0xHHHHHHHH _dataUint = perlinData.getVector(new Rectangle(0,0,n,2)); _dataVector = new Vector.() ; // First the upper row from left to right // coordinates x = i, y = blue channel's value from bitmap for (i=0 ; i!=n; i++) { _dataVector.push( i, _dataUint[i] & 0xFF ); } // Then the lower row from right to left for (i=n-1 ; i!=-1; i--) { _dataVector.push( i, _dataUint[n+i] & 0xFF ); } // Draw the new graphics with (this.graphics) { clear(); beginFill(0x00,1.0); lineStyle(1.0,0x00); drawPath(_commands, _dataVector); endFill(); } //} // for time testing // Update the Timer txt.text= Number(getTimer()-startT).toString() +" ms"; } } }