Forked from: autumngoodluck's お絵かきツールもどき(貧乏ゆすりバージョン) diff:28 お絵かきツールもどき(落下バージョン) autumngoodlu.. forked:0favorite:1lines:129license : MIT License modified : 2010-01-04 17:06:14 Embed Tweet // forked from autumngoodluck's お絵かきツールもどき(貧乏ゆすりバージョン) // forked from autumngoodluck's お絵かきツールもどき(なめらかバージョン) // forked from autumngoodluck's お絵かきツールもどき // forked from autumngoodluck's MyTemplate package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; [SWF(width="465", height="465", backgroundColor="0x227755", frameRate="25")] public class DrawSample extends Sprite { private var _lines:Array; private var _mouseDown:Boolean; /* * 初期化 */ public function DrawSample() { _lines = new Array(); _mouseDown = false; addEventListener(Event.ENTER_FRAME, loop, false, 0, true); stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler, false, 0, true); stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler, false, 0, true); } /* * マウスボタンが押されている間、線を描画する。 */ private function loop(event:Event):void { if (_mouseDown) { _lines[_lines.length - 1].addPoint(mouseX, mouseY); } for (var i:uint; i < _lines.length; i++) { _lines[i].draw(); } } /* * マウスボタンが押された時の処理 */ private function mouseDownHandler(event:MouseEvent):void { _mouseDown = true; _lines.push(new Line()); _lines[_lines.length - 1].addPoint(mouseX, mouseY); addChild(_lines[_lines.length - 1]); } /* * マウスボタンが離された時の処理 */ private function mouseUpHandler(event:MouseEvent):void { _mouseDown = false; _lines[_lines.length - 1].fix(); } } } import flash.display.Sprite; import flash.events.TimerEvent; import flash.geom.Point; import flash.utils.Timer; /* * 落下する点 */ class FallPoint extends Point { private var _velY:Number; // 落下速度 private var _grav:Number; // 重力 private var _timer:Timer; /* * 初期化 */ public function FallPoint(x:Number, y:Number) { super(x, y); _velY = 1; _grav = 1; _timer = new Timer(25); _timer.addEventListener(TimerEvent.TIMER, move); } /* * 落下運動スタート */ public function start():void { _timer.start(); } /* * 落下運動ストップ */ public function stop():void { _timer.stop(); } /* * 落下 */ private function move(event:TimerEvent):void { if (y > 500) { stop(); } else if (_timer.currentCount > 400) { _velY += _grav; y += _velY; } } } /* * 線クラス */ class Line extends Sprite { private var _thickness:Number; // 線の太さ private var _color:uint; // 線の色 private var _points:Array; // 線を構成する点 /* * 初期化 */ public function Line(thickness:Number = 6, color:uint = 0xFFFFFF) { _thickness = thickness; _color = color; _points = new Array(); } /* * 線を構成する点の追加 */ public function addPoint(x:Number, y:Number):void { _points.push(new FallPoint(x, y)); } /* * 線の描画 */ public function draw():void { graphics.clear(); graphics.lineStyle(_thickness, _color); if (_points.length == 2) { graphics.moveTo(_points[0].x, _points[0].y); graphics.lineTo(_points[1].x, _points[1].y); } else if (_points.length >= 3) { graphics.moveTo(_points[0].x, _points[0].y); for (var i:uint = 1; i < _points.length - 3; i++) { graphics.curveTo(_points[i].x, _points[i].y, (_points[i].x + _points[i + 1].x) / 2, (_points[i].y + _points[i + 1].y) / 2); } graphics.curveTo(_points[_points.length - 2].x, _points[_points.length - 2].y, _points[_points.length - 1].x, _points[_points.length - 1].y); } } /* * 線が確定した(これ以上点の追加がない)ことを知らせる */ public function fix():void { for (var i:uint = 0; i < _points.length; i++) { _points[i].start(); } } } Code Fullscreen Preview Fullscreen weBBBBB : 参考にさせてもらいます stop length currentCount mouseY mouseX addEventListener TimerEvent.ENTER_FRAME TimerEvent start TimerEvent.TIMER Timer push Array Boolean addChild Point uint Sprite Number