Создание панели перетаскивания чисто в ActionScript - PullRequest
0 голосов
/ 16 июля 2010

У меня возникли проблемы при создании механизма, позволяющего пользователю выбирать промежуток времени на временной шкале. По сути, я хочу, чтобы они могли щелкать и перетаскивать по горизонтали, а также получать начальную и конечную позиции этого события.

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

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

1 Ответ

3 голосов
/ 16 июля 2010

В принципе, мне не кажется, что вы что-то тянете.У вас просто последовательность нажатий, перемещений и отпусканий.Вам придется нажать на что-то, я уверен, что вы могли бы рассмотреть пресс-события на самой временной шкале.Так что это будет что-то вроде:

timeline.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
timeline.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
// the next line just considers that leaving the object surface is the same as depressing the mouse button
timeline.addEventListener(MouseEvent.MOUSE_OUT, onMouseUp);

function onMouseDown(evt:MouseEvent):void {
    // add the event listener for the mouse move action
    timeline.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
    // create the movie clip for the box
    // you get the mouse coordinates from evt.localX and evt.localY (relative to the origin of the timeline movieclip) or evt.stageX and evt.stageY (as global values)
}

function onMouseMove(evt:MouseEvent):void {
    // adjust the selection width and height
    // you get the mouse coordinates from evt.localX and evt.localY (relative to the origin of the timeline movieclip) or evt.stageX and evt.stageY (as global values)
}

function onMouseUp(evt:MouseEvent):void {
    // remove the event listener for the mouse move, that means that the function onMouseMove will no longer be called
    timeline.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
    // brush up and send the final coordinates of the selection to the next function
}

Для самой графики выбора вы можете использовать экземпляр фрагмента ролика из вашей библиотеки или просто создать пустой фрагмент ролика, сделать его полупрозрачными нарисуйте в нем прямоугольник, например:

var selection:MovieClip = new MovieClip();
selection.alpha = 0.5;
selection.graphics.beginFill(0x000000);
selection.graphics.drawRect(x,y,width,height);
selection.graphics.endFill();
this.addChild(selection);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...