【AS3】ドラッグ&ドロップと線を書くサンプル
仕事でやることになったのでサンプルを作ってみました。
どうってことないサンプルですが、一応flaファイルもアップしておきます。
下記コードの一部です。
一見謎ですがこうすると素早くドラッグされても処理が遅れることなくしっかりマウスについてきてくれる設定です。
private function onMousemove(e:MouseEvent):void {
e.updateAfterEvent();
}
サンプル
四角いのはドラッグしてでっかい四角にドロップできます。外側だとドロップできません。
ペンのアイコンをクリックすると四角の範囲で線が書けます。
マレーヴィチやミロ見たいな絵が描けます(笑)
ソース
package
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.geom.Point;
import flash.display.Shape;
import caurina.transitions.Tweener;
public class DragAndDrop extends MovieClip{
private var mc:*;
private var x_old;
private var y_old;
private var m_on;
private var g;
private var shape;
private var drawArea:DrawArea;
public function DragAndDrop(){
init();
x_old= stage.mouseX;
y_old= stage.mouseY;
m_on= false;
}
private function init():void {
box_mc.buttonMode = true;
box_mc.addEventListener(MouseEvent.MOUSE_DOWN, boxStartDrag);
pen_mc.addEventListener(MouseEvent.CLICK, penClickHandler);
reset_mc.addEventListener(MouseEvent.CLICK, resetAll);
reset_mc.buttonMode = true;
pen_mc.buttonMode = true;
drawArea = new DrawArea();
addChild(drawArea);
}
private function boxStartDrag(e:MouseEvent):void {
mc = new Box4();
mc.x = stage.mouseX;
mc.y = stage.mouseY;
mc.startDrag();
mc.alpha = 0.4;
mc.buttonMode = true;
drawArea.addChild(mc)
mc.addEventListener(MouseEvent.MOUSE_UP, boxStopDrag);
mc.addEventListener(MouseEvent.MOUSE_DOWN, mcStartDrag);
mc.addEventListener(MouseEvent.MOUSE_MOVE, onMousemove);
stage.removeEventListener(MouseEvent.MOUSE_DOWN,function(){m_on = true;});
stage.removeEventListener(MouseEvent.MOUSE_UP,function(){m_on = false;});
area_mc.removeEventListener(MouseEvent.MOUSE_MOVE,drawLine)
}
private function onMousemove(e:MouseEvent):void {
e.updateAfterEvent();
}
private function boxStopDrag(e:MouseEvent):void {
var m:* = e.currentTarget;
e.currentTarget.stopDrag();
if (e.currentTarget.hitTestObject(area_mc)) {
e.currentTarget.alpha = 1;
drawArea.addChild(m)
}else {
drawArea.removeChild(m)
}
m.dropHandler();
m.addEventListener(MouseEvent.MOUSE_MOVE, onMousemove);
}
private function mcStartDrag(e:MouseEvent):void {
var mc2:MovieClip = e.currentTarget as MovieClip;
e.currentTarget.startDrag();
e.currentTarget.alpha = 0.4;
drawArea.addChild(mc2)
mc.addEventListener(MouseEvent.MOUSE_MOVE,onMousemove);
}
private function getNum():int {
var num:int = Math.random() * 3
return num
}
private function penClickHandler(e:MouseEvent):void {
shape= new Shape();
drawArea.addChild(shape);
g= shape.graphics;
g.lineStyle (5, 0x000000, 100);
stage.addEventListener(MouseEvent.MOUSE_DOWN,function(){m_on = true;});
stage.addEventListener(MouseEvent.MOUSE_UP,function(){m_on = false;});
area_mc.addEventListener(MouseEvent.MOUSE_MOVE,drawLine)
}
private function drawLine(e:MouseEvent){
if(m_on){
g.moveTo (x_old, y_old);
g.lineTo (stage.mouseX, stage.mouseY);
}
x_old = stage.mouseX;
y_old = stage.mouseY;
};
private function resetAll(e:MouseEvent):void {
removeChild(drawArea)
drawArea = new DrawArea();
addChild(drawArea);
}
}
}
トラックバック(0)
このブログ記事を参照しているブログ一覧: 【AS3】ドラッグ&ドロップと線を書くサンプル
このブログ記事に対するトラックバックURL: http://alwaysfinetuning.com/mt/mt-tb.cgi/85

