путаница mouseX / Y при перетаскивании дочернего элемента контейнера - PullRequest
3 голосов
/ 26 мая 2011

У меня есть сетка изображений, которые добавляются в контейнер изображений (Sprite) в классе. Когда я нажимаю кнопку, контейнер изображений становится анимацией (масштабируется) до 0,2 Теперь я хотел бы начать перетаскивать изображения. при наведении мыши я добавляю событие enterFrame:

function onEnterFrame(e:Event):void
{
  imagecontainer.image.x = this.mouseX;
  imagecontainer.image.y = this.mouseY;

}

К сожалению, изображение никогда не находится в положении мыши, но имеет смещение увеличения / уменьшения к указателю мыши. Альтернатива, startDrag / stopDrag работает отлично, но мне все еще нужна мышь X / mouseY для размещения изображения в сетке… Я попробовал также parent.mouseX, не повезло с этим. Почему это происходит? Я думал, что mouseX / mouseY всегда зависит от размера сцены.

Ответы [ 3 ]

3 голосов
/ 26 мая 2011

вы пробовали:

function onEnterFrame(e:Event):void
{
  imagecontainer.image.x = stage.mouseX;
  imagecontainer.image.y = stage.mouseY;

}
1 голос
/ 26 мая 2011

Если вы хотите получить mouseX и mouseY относительно положения мыши на stage, то почему бы вам не использовать:

stage.mouseX,
stage.mouseY

Кроме того, если вы масштабируете что-то (скажем, до общего размера 200%), то 50 пикселей в поперечнике на сцене - это фактически 25 пикселей в масштабированном контейнере.

Используйте это как класс документа, чтобы понять, что я имею в виду:

package
{
    import flash.display.MovieClip;
    import flash.events.Event;

    public class Main extends MovieClip
    {
        private var _box:MovieClip;

        public function Main()
        {
            addEventListener(Event.ENTER_FRAME, _move);

            _box = new MovieClip();
            _box.scaleX = _box.scaleY = 2;

            addChild(_box);
        }

        private function _move(e:Event):void
        {
            trace("stage: " + stage.mouseX + ", " + stage.mouseY);
            trace("box: " + _box.mouseX + ", " + _box.mouseY);
        }
    }
}
0 голосов
/ 09 января 2016

Если вы все еще ищете это, возможно, вы можете использовать startDrag ();и stopDrag ();для перетаскивания изображений.

как это:

    image.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDownMC);
    image.addEventListener(MouseEvent.MOUSE_UP, onMouseUpMC);

    function onMouseDownMC(e:MouseEvent):void
    {
        e.currentTarget.startDrag(true);
    }
    function onMouseUpMC(e:MouseEvent):void
    {
        e.currentTarget.stopDrag();
    }

Обновление: Вы можете установить свою функцию так:

image.addEventListener(MouseEvent.MOUSE_DOWN, onMouseMC);
image.addEventListener(MouseEvent.MOUSE_UP, onMouseMC);

function onMouseMC(e:MouseEvent):void
{
    var type = e.type;
    if(type == MouseEvent.MOUSE_DOWN) /// u can use "mouseDown" accept  MouseEvent.MOUSE_DOWN 
    {
        e.currentTarget.startDrag(true);// if you set true its gonna drag the obj from center
    }
    else if(type == MouseEvent.MOUSE_UP)
    {
        e.currentTarget.stopDrag();  //u can use "mouseUp" accept  MouseEvent.MOUSE_UP
    }
}
...