0

我正在 as3/flash cs6 中制作交互式地图。目前,我可以放大和缩小,并被拖动。

但我的问题是,如何限制地图可以拖动的区域,所以你看不到它外面的空白?

这是我的代码:

    import flash.events.MouseEvent;

    function initDragger(mc:MovieClip):void
    {
        mc.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
        mc.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);


    }

    function mouseDownHandler(e:MouseEvent):void
    {
        e.currentTarget.startDrag();

    }
    function mouseUpHandler(e:MouseEvent):void
    {
        e.currentTarget.stopDrag();

    }

    // Set up drag
    initDragger(map);

    zoomIn.addEventListener(MouseEvent.CLICK, mapzoomin);

    function mapzoomin(event:MouseEvent):void
    {
        if (map.scaleX < 10)
        {
            map.scaleX +=  1;
            map.scaleY +=  1;
        }

    }

    zoomOut.addEventListener(MouseEvent.CLICK, mapzoomout);

    function mapzoomout(event:MouseEvent):void
    {
        if (map.scaleX > 1)
        {
            map.scaleX -=  1;
            map.scaleY -=  1;
        }

    }
4

2 回答 2

0

矩形尺寸应与可拖动项目的左上角相关。因此,如果您有 100x100 的地图和 50x50 的可视区域,则矩形将为 {x:-50, y:-50, width: 50, height:50}

于 2013-05-22T11:58:44.553 回答
0

一个非常简单的方法是检查地图的 x 和 y 坐标是什么,并确保它们不会超出您的预期。
例如。
(假设你的舞台是 200px 宽和高)

stage.addEventListener(Event.ENTER_FRAME, update);

function update(e:Event)
{
    if(map.x > 0) map.x = 0;
    if(map.x < map.width - 200) map.x = map.width - 200;
    if(map.y > 0) map.y = 0;
    if(map.y < 0 - (map.height - 200)) map.y = 0 - (map.height - 200);
}

我没有测试过,但它应该是正确的。

于 2013-10-15T08:25:42.137 回答