flash on 2010-8-29
위치 조절되고, 크기조절되는 원.
중심부 드레그 : 위치조절
테두리 드래그 ; 크기조절
자식에게 전달되는 이벤트는 부모가 받을수있으므로,
본소스에서 사용된(자식이 별도의 이벤트를전달해주는)방식은
사실, 불필요한 요소입니다.
이벤트 전달 순서 : capture->target->bubble 관련 정보를 참조할것.
/**
* Copyright sixgen ( http://wonderfl.net/user/sixgen )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/6n9N
*/
package {
var asdf:uint
// 위치 조절되고, 크기조절되는 원.
// 중심부 드레그 : 위치조절
// 테두리 드래그 ; 크기조절
// 자식에게 전달되는 이벤트는 부모가 받을수있으므로,
// 본소스에서 사용된(자식이 별도의 이벤트를전달해주는)방식은
// 사실, 불필요한 요소입니다.
// 이벤트 전달 순서 : capture->target->bubble 관련 정보를 참조할것.
import flash.display.Sprite;
import flash.text.TextField;
import flash.events.*;
public class FlashTest2 extends Sprite {
public var canvas:Canvas2D;
public var t1:TextField;
public var circleWg:Wiget;
public var circleWg2:Wiget;
public function FlashTest2() {
// write as3 code here..
canvas = new Canvas2D;
addChild(canvas);
canvas.x = 10;
canvas.y = 10;
circleWg = new Wiget;
canvas.addChild( circleWg);
circleWg.x = 100;
circleWg.y = 100;
circleWg2 = new Wiget;
canvas.addChild( circleWg2);
circleWg2.x =200;
circleWg2.y = 140;
// var canvass:Canvas2D = new Canvas2D();
// canvass.addChild(canvas);
// addChild(canvass);
canvas.rotationX = -40;
}
}
}
import flash.display.AVM1Movie;
import flash.display.Shape;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.display.Sprite;
import flash.events.*;
class Wiget extends Sprite{
public var shape:Sprite;
public var handleMove:Sprite; //
public var handleSize:Sprite; //
public var t:TextField;
public var size:Number = 50;
public function Wiget()
{
t = new TextField();
t.autoSize = TextFieldAutoSize.CENTER;
t.selectable = false;
t.text = "text Label한글";
addChild(t);
//t.y = -70;
shape = new Sprite();
addChild(shape);
handleSize = new Sprite();
addChild(handleSize);
handleMove = new Sprite();
addChild(handleMove);
//테두리영역
handleMove.addEventListener( MouseEvent.MOUSE_DOWN, onDownCenter);
handleSize.addEventListener( MouseEvent.MOUSE_DOWN, onDownOutLine);
addEventListener( MouseEvent.MOUSE_UP, onRelease);
addEventListener( MouseEvent.MOUSE_OUT, onRelease);
reDraw();
}
public function reDraw(e:Event = null):void
{
//redraw shape
shape.graphics.clear();
handleSize.graphics.clear();
handleMove.graphics.clear();
var outlineThickness:Number = 4;
shape.graphics.beginFill( 0x113355, 0.5);
shape.graphics.lineStyle( outlineThickness, 0xffffff, 1, false);
shape.graphics.drawCircle(0,0, size );
handleSize.graphics.beginFill(0xffffff, 0);
handleSize.graphics.drawCircle( 0, 0, size + outlineThickness /2);
handleMove.graphics.beginFill(0x113355, 0);
handleMove.graphics.drawCircle( 0, 0, size - outlineThickness);
t.x = -(t.width / 2);
t.y = size + 3;
}
private function mouseDragFollower(e:MouseEvent):void
{
x = this.parent.mouseX;
y = this.parent.mouseY;
}
private function onDownCenter(e:MouseEvent):void
{
t.text = "moving";
//startDrag();
addEventListener( MouseEvent.MOUSE_MOVE , mouseDragFollower);
parent.dispatchEvent( new WigetEvent( WigetEvent.MOVE, this));
}
private function onDownOutLine(e:MouseEvent):void
{
t.text = "OutLine pressed";
//시작점의 r까지의깊이
// d0 = size - Math.sqrt( cx * cx + cy * cy);
//t.appendText( String(parent) );
parent.dispatchEvent( new WigetEvent( WigetEvent.RESIZE, this));
}
private function onRelease(e:MouseEvent):void
{
t.text = "";
//stopDrag();
removeEventListener( MouseEvent.MOUSE_MOVE , mouseDragFollower);
}
}
class Canvas2D extends Sprite{
private var t:TextField;
public var currentWg:Wiget;
public var cx:Number; //drag시작점
public var cy:Number;
private var d0:Number;
public function Canvas2D()
{
//사각형
this.graphics.beginFill(0xcccccc,1);
this.graphics.drawRect(0,0,400,400);
this.graphics.endFill();
t = new TextField();
t.text = "hello";
addChild(t);
addEventListener( MouseEvent.MOUSE_UP, onRelease);
addEventListener( MouseEvent.ROLL_OUT, onRelease);
addEventListener( WigetEvent.RESIZE, startResize);
addEventListener( WigetEvent.MOVE, onWigetMoveHandler);
}
private function onWigetMoveHandler(e:WigetEvent):void
{
addChild( e.wiget);
}
private function onRelease(e:MouseEvent):void
{
t.text = "";
removeEventListener(MouseEvent.MOUSE_MOVE, resizeHandler);
}
private function startResize(e:WigetEvent):void
{
addChild( e.wiget);
t.text = "resizing: "+ String(e.wiget.name);
currentWg = e.wiget;
cx = currentWg.x;
cy = currentWg.y;
addEventListener(MouseEvent.MOUSE_MOVE, resizeHandler);
}
private function resizeHandler(e:MouseEvent):void
{
var r2:Number = ( mouseX - cx ) * ( mouseX - cx ) + ( mouseY - cy ) * ( mouseY - cy );
var r:Number = Math.sqrt(r2);
//var line:Shape = new Shape;
//addChild(line);
//line.graphics.lineStyle( 2, 0);
//line.graphics.lineTo( cx + r, 0);
currentWg.size = r;
currentWg.reDraw();
}
}
class WigetEvent extends Event{
public static const RESIZE:String = "resize";
public static const MOVE:String = "move";
public var message:String;
public var wiget:Wiget;
public function WigetEvent( eventMsg:String , wiget:Wiget )
{
super( eventMsg );
this.message = eventMsg;
this.wiget = wiget;
}
public override function clone():Event
{
return new WigetEvent( message, wiget);
}
public override function toString():String
{
return formatToString( "WigetEvent", "type", "bubbles", "cancelable", "eventPhase", "msg", "wiget");
}
}