AS3 Масштабирование MC с работающей мышью ... вроде - PullRequest
0 голосов
/ 29 февраля 2012

Я пытаюсь масштабировать прямоугольник, перетаскивая его.Код ниже работает, вроде , но я ищу возможные улучшения в производительности и точности.Идея состоит в том, чтобы щелкать, перетаскивать и изменять размер, просто по горизонтали.Одна неприятная вещь заключается в том, что она перестает прокручиваться, когда мышь ВНИЗ, но больше не находится над MC.

var isPressed:Boolean = false;

mcMXredBox.addEventListener(MouseEvent.MOUSE_MOVE, moved);
mcMXredBox.addEventListener(MouseEvent.MOUSE_DOWN, pressed);
mcMXredBox.addEventListener(MouseEvent.MOUSE_UP, released);


function moved(e:Event):void{
if (isPressed) 
this.scaleX = 1 + (mouseX/100);
}

function pressed(e:MouseEvent):void{
isPressed = true;
moved(e);
}
function released(e:MouseEvent):void{
isPressed = false;
}

Ответы [ 2 ]

1 голос
/ 29 февраля 2012

Я бы изменил это на что-то вроде следующего:

mcMXredBox.addEventListener(MouseEvent.MOUSE_DOWN, pressed);

var initMouseX;

function moved(e:Event):void{
    this.width += (mouseX - initMouseX);
    initMouseX = mouseX;
}

function pressed(e:MouseEvent):void{
    initMouseX = mouseX;

    stage.addEventListener(MouseEvent.MOUSE_UP, released);
    stage.addEventListener(MouseEvent.MOUSE_MOVE, moved);

    moved(e);
}

function released(e:MouseEvent):void{
    stage.removeEventListener(MouseEvent.MOUSE_UP, released);
    stage.removeEventListener(MouseEvent.MOUSE_MOVE, moved);
}

Добавляя слушателей, когда мышь нажата (и удаляя их, когда отпущено), вам больше не нужно опрашивать, чтобы увидеть,мышь не работает, так что это сохранит производительность, если не перетаскивать.Добавление на сцену решит вашу проблему не регистрироваться, когда мышь больше не находится над объектом.Наконец, есть некоторые хитрости в разработке математики перетаскивания.

0 голосов
/ 29 февраля 2012

Добавьте события MouseEvent.MOUSE_MOVE и MouseEvent.MOUSE_UP к родительскому экранному объекту или, возможно, к рабочей области.

Например:

mcMXredBox.addEventListener(MouseEvent.MOUSE_DOWN, pressed);
stage.addEventListener(MouseEvent.MOUSE_MOVE, moved);
stage.addEventListener(MouseEvent.MOUSE_UP, released);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...