お絵描きの初歩(ピンクの太線)
// forked from nabe's ソースの雛形
package {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
[SWF(width="465", height="465", backgroundColor="0xAABBCC", frameRate="1")];
public class BaseClass extends Sprite {
private var W_:uint;
private var H_:uint;
private var list_:Vector.<Point>;
private var before_:uint;
private var current_:uint = 0;
private var drag_:Boolean = false;
private var bmd_:BitmapData;
private var cursor_:Sprite;
private var work_:Shape;
public function BaseClass () {
//コンストラクタ。ここから全体の処理が開始する。
//1.初期化処理の呼び出しを仕込むに留める。
addEventListener(Event.ADDED_TO_STAGE, init_);
}
private function init_ (event_:Event):void {
//初期化処理。
//1.用済みのリスナ登録を解除する。
event_.target.removeEventListener(event_.type, arguments.callee);
//2.実際の処理を書き足す。
sample_();
}
private function sample_ ():void {
//サンプル処理。
//1.画面サイズを取得する。
W_ = stage.stageWidth;
H_ = stage.stageHeight;
//2.ビットマップを配置する。
bmd_ = new BitmapData(W_, H_, false, 0xAABBCC);
addChild(new Bitmap(bmd_));
//3.描画作業用のシェイプを用意する。
work_ = new Shape();
//4.カーソルを作成する。
cursor_ = new Sprite();
var graphics_:Graphics;
graphics_ = cursor_.graphics;
graphics_.lineStyle(0, 0xFF0000);
graphics_.drawCircle(0, 0, 5);
addChild(cursor_);
cursor_.startDrag(true);
//5.カーソル位置記憶用の配列を用意する。
list_ = new Vector.<Point>(2, true);
for (var i_:int = 0; i_ < 2; i_++) list_[i_] = new Point();
//6.イベント処理を登録する。
stage.addEventListener(MouseEvent.MOUSE_DOWN, beginDrag_);
stage.addEventListener(MouseEvent.MOUSE_MOVE, onDrag_);
stage.addEventListener(MouseEvent.MOUSE_UP , endDrag_);
}
private function fetchPos_ ():void {
before_ = current_;
current_ = 1 - current_;
list_[current_].x = mouseX;
list_[current_].y = mouseY;
}
private function beginDrag_ (event_:MouseEvent):void {
fetchPos_();
drag_ = true;
}
private function onDrag_ (event_:MouseEvent):void {
if (!drag_) return;
fetchPos_();
var graphics_:Graphics = work_.graphics;
graphics_.clear();
graphics_.lineStyle(10, 0xFFCCCC);
graphics_.moveTo(list_[before_].x, list_[before_].y);
graphics_.lineTo(list_[current_].x, list_[current_].y);
bmd_.draw(work_);
}
private function endDrag_ (event_:MouseEvent):void {
drag_ = false;
}
}
}