Here it is. My first real experiment in Flash 9.
Because, first and foremost, Flash is a trip toy.
Code for this experiment here:
package { import flash.display.*; import flash.events.Event; import flash.geom.*; import flash.filters.BlurFilter; public class BitmapRotate2 extends Sprite { private var _graphic:PolyStar; private var _graphic2:PolyStar; private var _bitmap:BitmapData; private var _image:Bitmap; private var _m:Matrix; private var _blurFilter:BlurFilter; private var xSpeed:Number = .9; private var ySpeed:Number = 1.1; public function BitmapRotate2() { _graphic = new PolyStar(0,0,7,false,50,30,0,0xff0000,100,0x0000ff,100); _m = _graphic.transform.matrix; _blurFilter = new BlurFilter(); addEventListener(Event.ENTER_FRAME,registerStage); } public function registerStage(event:Event) { if(stage) { removeEventListener(Event.ENTER_FRAME,registerStage); _graphic.x = 0 _graphic.y = 0; _bitmap = new BitmapData(stage.stageWidth,stage.stageHeight,true,0xff000000); _image = new Bitmap(_bitmap); _m = _graphic.transform.matrix; _graphic2 = new PolyStar(stage.stageWidth/2,stage.stageHeight/2,9,true,stage.stageWidth/2-20,stage.stageWidth/6,0,0xff0000,100,0xff0000,0); addChild(_image); addEventListener(Event.ENTER_FRAME,onEnterFrame); } } private function onEnterFrame(event:Event) { _graphic.rotation+=5; _graphic.x = mouseX; _graphic.y = mouseY; _m = _graphic.transform.matrix; _bitmap.draw(_graphic,_graphic.transform.matrix); _bitmap.draw(_graphic2,_graphic2.transform.matrix); _bitmap.applyFilter(_bitmap,_bitmap.rect,new Point(),_blurFilter); } } }
The “PolyStar” class is here:
package { import flash.display.Shape public class PolyStar extends Shape{ public function PolyStar($x:Number,$y:Number,$points:Number,$vertical:Boolean,$outerRad:Number,$innerRad:Number,$lineW:Number,$lineC:Number,$lineA:Number,$bgC,$bgA:Number) { var points:Number = $points*2; var angleDelta:Number = (Math.PI*2 / points); var angle:Number = 0; var anglex:Number = 0; var angley:Number = 0; graphics.lineStyle($lineW,$lineC,$lineA); if(typeof($bgC)=="number") { graphics.beginFill($bgC,$bgA); } else { graphics.beginGradientFill($bgC.type,$bgC.colors,$bgC.alphas,$bgC.ratios,$bgC.matrix); } if($vertical != true) { graphics.moveTo($outerRad,0); } else { graphics.moveTo(//change orientation of polygon Math.cos(angle + (angleDelta/2)) * $outerRad, Math.sin(angle + (angleDelta/2)) * $outerRad ); } for(var i=0;i<points;i++) br=""> angle += angleDelta; var temp:Number = (i%2) ? $outerRad: $innerRad; if($vertical != true) { anglex = Math.cos(angle) * temp; angley = Math.sin(angle) * temp; } else {//change orientation of polygon anglex = Math.cos(angle + (angleDelta/2)) * temp; angley = Math.sin(angle + (angleDelta/2)) * temp; } graphics.lineTo(anglex,angley); } x = $x; y = $y; } } }
Enjoy!