Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 鼠标向上移动事件无法正常工作_Actionscript 3_Flash Cs4 - Fatal编程技术网

Actionscript 3 鼠标向上移动事件无法正常工作

Actionscript 3 鼠标向上移动事件无法正常工作,actionscript-3,flash-cs4,Actionscript 3,Flash Cs4,谁能帮我一下吗。 附件是fla,其中有一部分代码我正在为一个项目工作 在鼠标的帮助下,您可以在图像上画一个圆,但由于某些原因,鼠标向上事件不起作用。当eventlisteners连接到舞台时,它可以正常工作,但当它连接到movieclip时,它不工作 另外,我如何限制只在矩形的movieclip内绘制圆 这是密码 const CANVAS:Sprite = new Sprite(); var _dragging:Boolean = false; var _corner:Point; va

谁能帮我一下吗。 附件是fla,其中有一部分代码我正在为一个项目工作

在鼠标的帮助下,您可以在图像上画一个圆,但由于某些原因,鼠标向上事件不起作用。当eventlisteners连接到舞台时,它可以正常工作,但当它连接到movieclip时,它不工作

另外,我如何限制只在矩形的movieclip内绘制圆

这是密码

    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); 
}

如果将MouseEvent.MOUSE\u添加到要拖动的对象中,则只有在鼠标向上移动时项目位于鼠标下方时才会触发事件,但由于您使用鼠标移动更新项目,因此这是鼠标向上移动与鼠标移动之间的竞争条件

为了避免此类问题,您需要保证在实时更新周期中,每当鼠标启动时,您都会收到鼠标启动。为此,在需要时将事件侦听器添加到stage,如下所示:

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不会无意中被调用


希望这对您有所帮助

如果您将MouseEvent.MOUSE\u添加到正在拖动的对象,则仅当项目在鼠标下方时才会触发该事件,但由于您正在使用MOUSE\u MOVE更新项目,因此这是鼠标移动与鼠标移动之间的竞争条件

为了避免此类问题,您需要保证在实时更新周期中,每当鼠标启动时,您都会收到鼠标启动。为此,在需要时将事件侦听器添加到stage,如下所示:

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不会无意中被调用


希望这有帮助

这可能也会引起兴趣:刚刚注意到我在上一条评论中的链接已过期:这可能也会引起兴趣:刚刚注意到我在上一条评论中的链接已过期:嘿,你应该投票或标记为回答你的问题的回答。如果你觉得我可以提供更多帮助,请发表评论,我会更全面地充实我的答案。嘿,你应该投票或将回答你问题的答案标记为回答。如果你觉得我可以提供更多帮助,请发表评论,我会更全面地给出我的答案。