shape sketching
This commit is contained in:
parent
91b0caf974
commit
0757363573
|
@ -16,30 +16,35 @@ package
|
||||||
public function ClickArea(rgpoint: Array, color:uint, alpha:Number = 1)
|
public function ClickArea(rgpoint: Array, color:uint, alpha:Number = 1)
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
shape = MakeShape(rgpoint, color, alpha);
|
shape = drawShape(new Shape(), rgpoint, color, null, alpha);
|
||||||
shapeHidden = MakeShape(rgpoint, color, 0);
|
shapeHidden = drawShape(new Shape(), rgpoint, color, null, 0);
|
||||||
fHidden = false;
|
fHidden = false;
|
||||||
addChild(shape);
|
addChild(shape);
|
||||||
}
|
}
|
||||||
private function MakeShape(rgpoint:Array, color:uint, alpha:Number):Shape
|
public static function drawShape(shape:Shape, rgpoint:Array, color:uint, colorLine:* = null, alpha:Number = 1):Shape
|
||||||
{
|
{
|
||||||
var shape:Shape = new Shape();
|
shape.graphics.clear();
|
||||||
shape.graphics.beginFill(color, alpha);
|
if (rgpoint.length > 0)
|
||||||
var fFirstPoint:Boolean = true;
|
|
||||||
for each (var point:Point in rgpoint)
|
|
||||||
{
|
{
|
||||||
if (fFirstPoint)
|
if (colorLine != null)
|
||||||
|
shape.graphics.lineStyle(1, colorLine);
|
||||||
|
shape.graphics.beginFill(color, alpha);
|
||||||
|
var fFirstPoint:Boolean = true;
|
||||||
|
for each (var point:Point in rgpoint)
|
||||||
{
|
{
|
||||||
shape.graphics.moveTo(point.x, point.y);
|
if (fFirstPoint)
|
||||||
fFirstPoint = false;
|
{
|
||||||
}
|
shape.graphics.moveTo(point.x, point.y);
|
||||||
else
|
fFirstPoint = false;
|
||||||
{
|
}
|
||||||
shape.graphics.lineTo(point.x, point.y);
|
else
|
||||||
|
{
|
||||||
|
shape.graphics.lineTo(point.x, point.y);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
shape.graphics.lineTo(rgpoint[0].x, rgpoint[0].y);
|
||||||
|
shape.graphics.endFill();
|
||||||
}
|
}
|
||||||
shape.graphics.lineTo(rgpoint[0].x, rgpoint[0].y);
|
|
||||||
shape.graphics.endFill();
|
|
||||||
return shape;
|
return shape;
|
||||||
}
|
}
|
||||||
public function Show():void
|
public function Show():void
|
||||||
|
|
10
src/Main.as
10
src/Main.as
|
@ -12,9 +12,11 @@ package
|
||||||
public class Main extends Sprite
|
public class Main extends Sprite
|
||||||
{
|
{
|
||||||
private var clickarea:ClickArea;
|
private var clickarea:ClickArea;
|
||||||
|
private var sketchShape:SketchShape;
|
||||||
public function Main():void
|
public function Main():void
|
||||||
{
|
{
|
||||||
clickarea = new ClickArea([new Point(50, 50), new Point(100, 80), new Point(30, 120)], 0x555555);
|
clickarea = new ClickArea([new Point(50, 50), new Point(100, 80), new Point(30, 120)], 0x555555);
|
||||||
|
sketchShape = new SketchShape();
|
||||||
if (stage) init();
|
if (stage) init();
|
||||||
else addEventListener(Event.ADDED_TO_STAGE, init);
|
else addEventListener(Event.ADDED_TO_STAGE, init);
|
||||||
}
|
}
|
||||||
|
@ -24,14 +26,20 @@ package
|
||||||
removeEventListener(Event.ADDED_TO_STAGE, init);
|
removeEventListener(Event.ADDED_TO_STAGE, init);
|
||||||
// entry point
|
// entry point
|
||||||
addChild(clickarea);
|
addChild(clickarea);
|
||||||
|
addChild(sketchShape);
|
||||||
addEventListener(MouseEvent.CLICK, onClick);
|
addEventListener(MouseEvent.CLICK, onClick);
|
||||||
|
sketchShape.addEventListener(Event.COMPLETE, onShapeComplete);
|
||||||
}
|
}
|
||||||
private function onClick(e: MouseEvent): void
|
private function onClick(e: MouseEvent): void
|
||||||
{
|
{
|
||||||
if (clickarea.FHit(new Point(e.stageX, e.stageY)))
|
if (clickarea.FHit(new Point(e.stageX, e.stageY)))
|
||||||
clickarea.Toggle();
|
clickarea.Toggle();
|
||||||
}
|
}
|
||||||
|
private function onShapeComplete(e: Event): void
|
||||||
|
{
|
||||||
|
addChild(new ClickArea(sketchShape.rgpoint, 0x883388, 0.5));
|
||||||
|
sketchShape.clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
85
src/SketchShape.as
Normal file
85
src/SketchShape.as
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
package
|
||||||
|
{
|
||||||
|
import flash.display.Shape;
|
||||||
|
import flash.display.Sprite;
|
||||||
|
import flash.events.Event;
|
||||||
|
import flash.events.MouseEvent;
|
||||||
|
import flash.geom.Point;
|
||||||
|
import flash.utils.getTimer;
|
||||||
|
/**
|
||||||
|
* ...
|
||||||
|
* @author jjp
|
||||||
|
*/
|
||||||
|
public class SketchShape extends Sprite
|
||||||
|
{
|
||||||
|
public var rgpoint: Array;
|
||||||
|
private var shape: Shape;
|
||||||
|
private var shapeLine: Shape;
|
||||||
|
private var msClickLast: int;
|
||||||
|
public function SketchShape()
|
||||||
|
{
|
||||||
|
super();
|
||||||
|
rgpoint = [];
|
||||||
|
shape = new Shape();
|
||||||
|
shapeLine = null;
|
||||||
|
msClickLast = -1;
|
||||||
|
addChild(shape);
|
||||||
|
addEventListener(Event.ADDED_TO_STAGE, init);
|
||||||
|
}
|
||||||
|
private function init(e: Event):void
|
||||||
|
{
|
||||||
|
stage.doubleClickEnabled = true;
|
||||||
|
stage.addEventListener(MouseEvent.CLICK, onClick);
|
||||||
|
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove);
|
||||||
|
}
|
||||||
|
public function clear():void
|
||||||
|
{
|
||||||
|
rgpoint = [];
|
||||||
|
if (shapeLine !== null)
|
||||||
|
{
|
||||||
|
removeChild(shapeLine);
|
||||||
|
shapeLine = null;
|
||||||
|
}
|
||||||
|
redrawShape();
|
||||||
|
}
|
||||||
|
private function onClick(e: MouseEvent):void
|
||||||
|
{
|
||||||
|
var msClickNow:int = getTimer();
|
||||||
|
var dmsClick:int = msClickNow - msClickLast;
|
||||||
|
if (dmsClick < 200)
|
||||||
|
{
|
||||||
|
dispatchEvent(new Event(Event.COMPLETE));
|
||||||
|
clear();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (shapeLine === null)
|
||||||
|
{
|
||||||
|
shapeLine = new Shape();
|
||||||
|
addChild(shapeLine);
|
||||||
|
}
|
||||||
|
rgpoint.push(new Point(e.stageX, e.stageY));
|
||||||
|
redrawShape();
|
||||||
|
}
|
||||||
|
msClickLast = msClickNow;
|
||||||
|
}
|
||||||
|
private function onMove(e: MouseEvent):void
|
||||||
|
{
|
||||||
|
if (shapeLine !== null)
|
||||||
|
redrawLine(new Point(e.stageX, e.stageY));
|
||||||
|
}
|
||||||
|
private function redrawShape():void
|
||||||
|
{
|
||||||
|
ClickArea.drawShape(shape, rgpoint, 0x555555, 0x000000, 0.1);
|
||||||
|
}
|
||||||
|
private function redrawLine(ptEnd:Point):void
|
||||||
|
{
|
||||||
|
var ptStart:Point = rgpoint[rgpoint.length - 1];
|
||||||
|
shapeLine.graphics.clear();
|
||||||
|
shapeLine.graphics.lineStyle(1);
|
||||||
|
shapeLine.graphics.moveTo(ptStart.x, ptStart.y);
|
||||||
|
shapeLine.graphics.lineTo(ptEnd.x, ptEnd.y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue