package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.filters.BlurFilter;
import flash.filters.DropShadowFilter;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
[SWF(width=640, height=480, backgroundColor=0xf0f0e0, frameRate=30)]
public class SprayPaint extends Sprite
{
private var canvas:BitmapData;
private var color:uint;
private var size:Number = 20;
private var density:Number = 100; // –§“x
public function SprayPaint()
{
this.addEventListener( Event.ADDED_TO_STAGE, init );
}
private function init( ev:Event ):void
{
this.removeEventListener( Event.ADDED_TO_STAGE, init );
stage.scaleMode = StageScaleMode.NO_SCALE;
if( stage.stageWidth == 0 || stage.stageHeight == 0 )
{
// error.
var tf:TextField = new TextField();
tf.text = 'error! stageWidth == ' + stage.stageWidth.toString() + ', stageHeight == ' + stage.stageHeight.toString();
tf.autoSize = TextFieldAutoSize.LEFT;
addChild(tf);
return;
}
canvas = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0x00000000);
var bmp:Bitmap = new Bitmap(canvas);
bmp.filters = [new BlurFilter(2, 2, 3), new DropShadowFilter()];
addChild(bmp);
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
}
private function onMouseDown(event:MouseEvent):void
{
color = Math.random() * 0xffffff + 0xff000000;
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onMouseUp(event:MouseEvent):void
{
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(event:Event):void
{
for(var i:int = 0; i < density; i++)
{
var angle:Number = Math.random() * Math.PI * 2;
var radius:Number = Math.random() * size;
var xpos:Number = mouseX + Math.cos(angle) * radius;
var ypos:Number = mouseY + Math.sin(angle) * radius;
canvas.setPixel32(xpos, ypos, color);
}
}
}
}