我遇到了一点问题。我正在创建一个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)
}
您可以通过MouseEvent
的目标进行区分。
draw监听器被添加到舞台中。currentTarget
就是stage
。启动拖动的侦听器(可能)被添加到应该拖动的对象中。currentTarget
将对此进行参考。
由于每个MouseEvent
都会冒泡到stage
,这就是再次绘制矩形的原因。不同之处在于MouseEvent
的target
将不同。
在处理用于绘制矩形的MouseEvent
的函数中,只需检查currentTarget == target
,如果是这样的话,鼠标是否单击了stage
,而不是其他。如果它们不一样,鼠标点击了其他东西,目的不是画一个矩形。
如果单击了除stage
之外的任何其他内容,则基本上将禁用矩形绘图。
您可能还可以通过stopPropagation()
和为不同的事件阶段添加侦听器来实现这一点。但我没有时间仔细考虑。