Flash CS6 / as3:使用光标在已发布的swf中动态绘制矩形

时间:2015-06-26 13:11:08

标签: actionscript-3 flash shape drag

我有点问题。我创建了一个允许某人在已发布的swf中动态绘制矩形的swf,然后他们可以拖动一个形状并将其放置在刚刚绘制的矩形内。

我有swf工作,你可以画一个矩形,没问题。出现问题的地方在于尝试将屏幕上的一个形状拖动到新绘制的矩形中时,最终会在拖动形状时绘制另一个矩形。

我的问题,我想,我是如何关闭"在我绘制了我想要使用的那个之后允许绘制矩形的代码?

这是我用来绘制矩形的代码(我从在线教程中得到了这个代码)。在绘制矩形之前,可拖动的形状不会显示(它们位于下一帧):

stop();

import flash.display.Shape;

var temporaryDrawing:Shape = new Shape();
addChild(temporaryDrawing);
temporaryDrawing.graphics.lineStyle(3, 0x000000, 1);

var myDrawing:Shape = new Shape();
addChild(myDrawing);
myDrawing.graphics.lineStyle(3, 0x000000, 1);

var mouseHolding:Boolean=false;
var clickedX:Number;
var clickedY:Number;


stage.addEventListener(MouseEvent.MOUSE_DOWN, mDown);
stage.addEventListener(MouseEvent.MOUSE_UP, mUp);

function mDown(MouseEvent):void{
    mouseHolding = true;
    clickedX = mouseX;
    clickedY = mouseY;
}

function mUp(MouseEvent):void{
    mouseHolding = false;
    myDrawing.graphics.drawRect(clickedX, clickedY, mouseX-clickedX, mouseY-clickedY);
    nextFrame();
    clearTemp ()
}

stage.addEventListener(MouseEvent.MOUSE_MOVE, mMove);
function mMove(MouseEvent):void{
    if (mouseHolding){
        clearTemp ();
        temporaryDrawing.graphics.drawRect(clickedX, clickedY, mouseX-clickedX, mouseY-clickedY)

    }
}

function clearTemp():void{
    temporaryDrawing.graphics.clear();
    temporaryDrawing.graphics.lineStyle(3, 0x000000, 1)
}

1 个答案:

答案 0 :(得分:0)

您可以按MouseEvent的目标进行区分。

绘图侦听器已添加到舞台中。 currentTarget就是stage。启动拖动的侦听器(可能)被添加到应该拖动的对象中。 currentTarget将是对此的参考。

由于冒泡,每个MouseEvent都会以stage结束,这就是为什么再次绘制矩形的原因。不同之处在于target的{​​{1}}会有所不同。

在处理用于绘制矩形的MouseEvent的函数中,只需检查MouseEvent是否为currentTarget == target,如果是这种情况,则单击stage上的鼠标并且没有任何内容其他。如果它们不相同,则点击其他东西,意图不是绘制矩形。

如果点击的其他内容不是stage,这将基本上禁用矩形绘图。

您也可以使用stopPropagation()实现此目的,并为不同的事件阶段添加侦听器。但我没有时间考虑这一点。