Actionscript 3 AS3线路至方法备选方案
这不仅仅是寻找代码,更是一个逻辑问题,尽管它可能是必需的 因此,我正在创建一个绘图应用程序,首先要做的是使用lineTo方法绘制一条线——这很好。但我知道这不是我想要的,它确实画得很好,等等。但我想要一个不会“画线”的工具。我想要一个工具,它不会在你放开点击时放下线,但当你点击时它会放下 现在我真的不知道如何创造这个;有人能解释一下如何编写这样的代码吗?这可能是lineTo的另一种选择——很抱歉,如果这听起来令人困惑,很难用词来表达。这里有两个例子:Actionscript 3 AS3线路至方法备选方案,actionscript-3,draw,Actionscript 3,Draw,这不仅仅是寻找代码,更是一个逻辑问题,尽管它可能是必需的 因此,我正在创建一个绘图应用程序,首先要做的是使用lineTo方法绘制一条线——这很好。但我知道这不是我想要的,它确实画得很好,等等。但我想要一个不会“画线”的工具。我想要一个工具,它不会在你放开点击时放下线,但当你点击时它会放下 现在我真的不知道如何创造这个;有人能解释一下如何编写这样的代码吗?这可能是lineTo的另一种选择——很抱歉,如果这听起来令人困惑,很难用词来表达。这里有两个例子: 这会将线条绘制为与输入设备匹配的曲
尽管针对箭头进行了调整,但线条的概念是相同的。当输入设备处于关闭状态时,一条线/箭头处于暂存状态,但在输入设备处于打开状态之前不会持续显示。一旦画出,这条线就会一直存在 代码:
包
{
导入flash.display.capssstyle;
导入flash.display.Graphics;
导入flash.display.JointStyle;
导入flash.display.LineScaleMode;
导入flash.display.Sprite;
导入flash.display.StageAlign;
导入flash.display.StageScaleMode;
导入flash.events.Event;
导入flash.events.MouseEvent;
导入flash.geom.Point;
[SWF(百分宽=100,百分高=100,背景色=0xEFEF,帧率=30)]
公共类箭头扩展了Sprite
{
公共变量箭头:向量。=新向量。();
公共画布:精灵;
公共变量lineColor:uint=Math.random()*0xffffff;
公共变量线宽:编号=5;
私有var起始点:点;
公共功能箭头()
{
超级();
addEventListener(Event.ADDED_TO_STAGE,AddedStatageHandler);
}
受保护函数AddedStatageHandler(事件:event):void
{
stage.scaleMode=StageScaleMode.NO_SCALE;
stage.align=StageAlign.TOP\u左;
addCanvas();
}
受保护的函数addCanvas():void
{
画布=新精灵();
addChild(画布);
lineColor=Math.random()*0xffffff;
//给出交互作用的阿尔法
var g:Graphics=canvas.Graphics;
g、 beginull(0x0,0.0);
g、 drawRect(0,0,stage.stageWidth,stage.stageHeight);
g、 endFill();
//听老鼠的声音
canvas.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler);
}
受保护函数mouseDownHandler(事件:MouseEvent):void
{
canvas.removeEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler);
//标记起点
startPoint=新点(event.localX,event.localY);
//开始渲染
addEventListener(Event.ENTER_FRAME,enterFrameHandler);
//聆听鼠标向上/向外至结束箭头
canvas.addEventListener(MouseEvent.MOUSE\u UP,mouseHandler);
canvas.addEventListener(MouseEvent.MOUSE_OUT,mouseHandler);
}
受保护的函数enterFrameHandler(事件:事件):void
{
变量角度:数字=polarAngle(新点(鼠标x、鼠标y)、新点(startPoint.x、startPoint.y));
//划线
var g:Graphics=canvas.Graphics;
g、 清除();
//给出交互作用的阿尔法
g、 beginull(0x0,0.0);
g、 drawRect(0,0,stage.stageWidth,stage.stageHeight);
g、 endFill();
g、 线型(线宽、线颜色、1、真、LineScaleMode.NORMAL、CapssStyle.SQUARE、JointStyle.MITER);
g、 moveTo(startPoint.x,startPoint.y);
g、 lineTo(mouseX,mouseY);
//画箭头
g、 moveTo(mouseX-(20*Math.cos((角度-45)*Math.PI/180)),
鼠标-(20*Math.sin((角度-45)*Math.PI/180));
g、 lineTo(mouseX+(5*Math.cos((角度)*Math.PI/180)),
mouseY+(5*Math.sin((角度)*Math.PI/180));
g、 lineTo(鼠标-(20*Math.cos((角度+45)*Math.PI/180)),
鼠标-(20*Math.sin((角度+45)*Math.PI/180));
}
受保护函数polarAngle(点:点,中心:点=空):编号
{
如果(!中心)
中心=新点(0,0);
返回Math.atan2(point.y-center.y,point.x-center.x)*180/Math.PI;
}
受保护函数MouseHandler(事件:MouseEvent):无效
{
canvas.removeEventListener(MouseEvent.MOUSE\u UP,mouseHandler);
canvas.removeEventListener(MouseEvent.MOUSE_OUT,mouseHandler);
//停止渲染
removeEventListener(Event.ENTER_FRAME,enterFrameHandler);
//将画布推送到箭头集合
箭头。推(画布);
//添加新画布
addCanvas();
}
}
}
以下是两个示例:
尽管针对箭头进行了调整,但线条的概念是相同的。当输入设备处于关闭状态时,一条线/箭头处于暂存状态,但在输入设备处于打开状态之前不会持续显示。一旦画出,这条线就会一直存在 代码:
包
{
导入flash.display.capssstyle;
导入flash.display.Graphics;
导入flash.display.JointStyle;
导入flash.display.LineScaleMode;
导入flash.display.Sprite;
导入flash.display.StageAlign;
导入flash.display.StageScaleMode;
导入flash.events.Event;
导入flash.events.MouseEvent;
导入flash.geom.Point;
package
{
import flash.display.Graphics;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.MouseEvent;
import flash.geom.Point;
[SWF(percentWidth = 100, percentHeight = 100, backgroundColor = 0xefefef, frameRate = 30)]
public class DrawingExample extends Sprite
{
//------------------------------
// model
//------------------------------
protected var lastPoint:Point;
//------------------------------
// lifecycle
//------------------------------
public function DrawingExample()
{
super();
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
beginDrawing();
}
protected function beginDrawing():void
{
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
}
protected function mouseDownHandler(event:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
// mark mouse down location
lastPoint = new Point(mouseX, mouseY);
// listen for movement or up/out
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
stage.addEventListener(MouseEvent.MOUSE_OUT, mouseUpHandler);
}
protected function mouseMoveHandler(event:MouseEvent):void
{
var g:Graphics = graphics;
g.lineStyle(1, 0x0000ff);
// draw line segment
g.moveTo(lastPoint.x, lastPoint.y);
g.lineTo(mouseX, mouseY);
// mark end of line segment
lastPoint = new Point(mouseX, mouseY);
}
protected function mouseUpHandler(event:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
stage.removeEventListener(MouseEvent.MOUSE_OUT, mouseUpHandler);
beginDrawing();
}
}
}
package
{
import flash.display.CapsStyle;
import flash.display.Graphics;
import flash.display.JointStyle;
import flash.display.LineScaleMode;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Point;
[SWF(percentWidth = 100, percentHeight = 100, backgroundColor = 0xefefef, frameRate = 30)]
public class Arrows extends Sprite
{
public var arrows:Vector.<Sprite> = new Vector.<Sprite>();
public var canvas:Sprite;
public var lineColor:uint = Math.random() * 0xffffff;
public var lineWeight:Number = 5;
private var startPoint:Point;
public function Arrows()
{
super();
addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
}
protected function addedToStageHandler(event:Event):void
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
addCanvas();
}
protected function addCanvas():void
{
canvas = new Sprite();
addChild(canvas);
lineColor = Math.random() * 0xffffff;
// give alpha for interaction
var g:Graphics = canvas.graphics;
g.beginFill(0x0, 0.0);
g.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
g.endFill();
// listen for mouse down
canvas.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
}
protected function mouseDownHandler(event:MouseEvent):void
{
canvas.removeEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
// mark start point
startPoint = new Point(event.localX, event.localY);
// start rendering
canvas.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
// listen for mouse up / out to end arrow
canvas.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
canvas.addEventListener(MouseEvent.MOUSE_OUT, mouseUpHandler);
}
protected function enterFrameHandler(event:Event):void
{
var angle:Number = polarAngle(new Point(mouseX, mouseY), new Point(startPoint.x, startPoint.y));
// draw line
var g:Graphics = canvas.graphics;
g.clear();
// give alpha for interaction
g.beginFill(0x0, 0.0);
g.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
g.endFill();
g.lineStyle(lineWeight, lineColor, 1, true, LineScaleMode.NORMAL, CapsStyle.SQUARE, JointStyle.MITER);
g.moveTo(startPoint.x, startPoint.y);
g.lineTo(mouseX, mouseY);
// draw arrow head
g.moveTo(mouseX - (20 * Math.cos((angle - 45) * Math.PI / 180)),
mouseY - (20 * Math.sin((angle - 45) * Math.PI / 180)));
g.lineTo(mouseX + (5 * Math.cos((angle) * Math.PI / 180)),
mouseY + (5 * Math.sin((angle) * Math.PI / 180)));
g.lineTo(mouseX - (20 * Math.cos((angle + 45) * Math.PI / 180)),
mouseY - (20 * Math.sin((angle + 45) * Math.PI / 180)));
}
protected function polarAngle(point:Point, center:Point=null):Number
{
if (!center)
center = new Point(0, 0);
return Math.atan2(point.y - center.y, point.x - center.x) * 180 / Math.PI;
}
protected function mouseUpHandler(event:MouseEvent):void
{
canvas.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
canvas.removeEventListener(MouseEvent.MOUSE_OUT, mouseUpHandler);
// stop rendering
canvas.removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
// push canvas to arrows collection
arrows.push(canvas);
// add a fresh canvas
addCanvas();
}
}
}