任何人都可以帮助我。 附件是fla,它包含我正在为项目工作的代码的一部分。
在鼠标的帮助下,您可以在图像上绘制一个圆圈,但由于某些原因,鼠标向上事件不起作用。当eventlisteners附加到舞台时它可以正常工作,但当它附加到动画片段时不起作用。
我怎么能限制只在一个矩形的动画片段内绘制圆圈。
这是代码
const CANVAS:Sprite = new Sprite();
var _dragging:Boolean = false;
var _corner:Point;
var _corner2:Point;
menFront.addEventListener(MouseEvent.MOUSE_DOWN, setAnchor);
menFront.addEventListener(MouseEvent.MOUSE_UP, completeRect);
function setAnchor(e:MouseEvent):void{
trace("mouse down");
if(!_dragging){
CANVAS.graphics.clear();
_corner = new Point(e.stageX, e.stageY);
_dragging = true;
menFront.addEventListener(MouseEvent.MOUSE_MOVE, liveDrag);
}
}
function completeRect(e:MouseEvent):void{
trace("mouse up");
if(_dragging){
_dragging = false;
menFront.removeEventListener(MouseEvent.MOUSE_MOVE, liveDrag);
CANVAS.graphics.lineStyle(0, 0, 0);
CANVAS.graphics.beginFill(0x222222,.5)
_corner2 = new Point(e.stageX, e.stageY);
trace(Point.distance(_corner,_corner2).toFixed(2));
CANVAS.graphics.drawCircle(_corner.x, _corner.y, Point.distance(_corner,_corner2));
addChild(CANVAS);
}
}
function liveDrag(e:MouseEvent):void{
CANVAS.graphics.clear();
CANVAS.graphics.lineStyle(0, 0x999999);
_corner2 = new Point(e.stageX, e.stageY);
//trace(Point.distance(_corner,_corner2).toFixed(2));
CANVAS.graphics.drawCircle(_corner.x, _corner.y, Point.distance(_corner,_corner2));
addChild(CANVAS);
}
答案 0 :(得分:3)
如果将MouseEvent.MOUSE_UP添加到要拖动的对象,则在MOUSE_UP发生时,如果项目位于鼠标下方,则事件将仅 ,但是因为您正在更新使用MOUSE_MOVE的项目,这是MOUSE_UP发生时和MOUSE_MOVE发生之间的竞争条件。
为了避免此类问题,您希望保证在实时更新周期内,只要MOUSE_UP触发,您就会收到MOUSE_UP。要做到这一点,请在需要时将事件监听器添加到阶段,如下所示:
menFront.addEventListener(MouseEvent.MOUSE_DOWN, setAnchor);
function setAnchor(event:MouseEvent):void
{
stage.addEventListener(MouseEvent.MOUSE_UP, completeRect);
// your other functionality
}
function completeRect(event:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_UP, completeRect);
// your other functionality
}
如果你在其他地方点击,那么你的completeRect就不会被无意中调用。
希望这有助于