2013-05-22 3 views
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; 
     } 

    } 
+0

startDrag может принимать прямоугольник (связанный), где вы можете перетащить элемент. Взгляните на http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Sprite.html#startDrag%28%29 – Urosan

+0

Хорошо, я вижу. Так что я просто делаю границы такими же, как моя карта? –

ответ

0

Размеры прямоугольника должны быть по отношению к верхнему левому углу перетаскиваемого пункта. Итак, если бы у вас была карта 100x100 и видимая область размером 50x50, прямоугольник был бы {x: -50, y: -50, width: 50, height: 50}

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

Я не проверял, но он должен быть правильным.

Смежные вопросы