BitmapクラスとBitmapDataクラスによるスプレー風描画

2008年11月7日 19:21

念を送ると顔が浮き出ます。

[swf]/blog/wp-content/uploads/2008/11/ColorSprayPaint.swf, 550, 400[/swf]

package 
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.utils.Timer;
import flash.events.TimerEvent;

public class ColorSprayPaint extends Sprite {
private var baseCanvas:BitmapData;
private var splashCanvas:BitmapData;
private var color:uint;
private var sprayArea:Number = 300;//スプレーするエリア半径
private var spraySize:Number = 80;//スプレーのサイズ
private var sprayDensity:Number = 80;//スプレー密度
private var sprayNum:Number = 800;//スプレー回数

public function ColorSprayPaint() {
init();
}

private function init():void {
baseCanvas = new BitmapData(stage.stageWidth, stage.stageHeight, true);
splashCanvas = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0x00FFFFFF);
var baseBmp:Bitmap = new Bitmap(baseCanvas);//顔の描画用キャンバス
var splashBmp:Bitmap = new Bitmap(splashCanvas);//まわりに飛び散らす用のキャンバス
addChild(baseBmp);
addChild(splashBmp);

var face:Face = new Face();
face.x = stage.stageWidth / 2;
face.y = stage.stageHeight / 2;
addChild(face);
baseBmp.mask = face;//マスクの設定

var timer:Timer = new Timer(10, sprayNum);
timer.addEventListener(TimerEvent.TIMER, onInterval, false, 0, true);
timer.start();
}

private function onInterval(e:TimerEvent):void {
color = Math.random() * 0xFFFFFF + 0xFF000000;
var angle = Math.random() * Math.PI * 2;
var radius:Number = Math.random() * sprayArea;
spray(stage.stageWidth / 2 + Math.cos(angle) * radius, stage.stageHeight / 2 + Math.sin(angle) * radius);
}

private function spray(spX:Number,spY:Number):void {
for (var i:int = 0; i < sprayDensity; i++ ) {
var angle:Number = Math.random() * Math.PI * 2;
var radius:Number = Math.random() * spraySize;
var xpos:Number = spX + Math.cos(angle) * radius;
var ypos:Number = spY + Math.sin(angle) * radius;
baseCanvas.setPixel32(xpos, ypos, color);
if (i % 10 == 0) {
splashCanvas.setPixel32(xpos, ypos, color);
}
}
}
}
}

カテゴリー: programming タグ:

2 Comments

  1. なんとなくBOSSジャン思い出しました(;´∀`)

    コメント by tatzuro — 2008年11月10日 17:20

  2. あー、そう言われてみればそんな感じですね。
    あんなにダンディーじゃないですけど。

    コメント by littlepad — 2008年11月10日 18:52

TrackBack URL

Leave a comment