Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Перетаскивание мышью по одной оси координат (http://www.flasher.ru/forum/showthread.php?t=150484)

Indigo 12.02.2011 14:54

Перетаскивание мышью по одной оси координат
 
Ситуация: в аудио-плеере есть горизонтальная линия изменения громкости звука. Она состоит из трэка и ползунка. Ползунок - это отдельный спрайт, который движется по трэку.

Вопрос: как разрешить ползунку двигаться только по оси X? В ActionScript 2.0 для этого можно было указать соответствующие параметры в startDrag, но в ActionScript 3.0 для startDrag эти параметры убрали.

В настоящее время удалось только сделать следующий вариант: при MOUSE_DOWN ползунок двигается за мышью по всей сцене, а при MOUSE_UP возвращается на трэк. Этот вариант, как вы понимаете, меня не устраивает.

Flashrunner 12.02.2011 16:15

Цитата:

Вопрос: как разрешить ползунку двигаться только по оси X? В ActionScript 2.0 для этого можно было указать соответствующие параметры в startDrag, но в ActionScript 3.0 для startDrag эти параметры убрали.
в ActionScript 3.0 startDrag есть параметр bounds:Rectangle, смотрите доки по нему.
Цитата:

В настоящее время удалось только сделать следующий вариант: при MOUSE_DOWN ползунок двигается за мышью по всей сцене, а при MOUSE_UP возвращается на трэк. Этот вариант, как вы понимаете, меня не устраивает.
Кто заставляет вас двигать его за мышью по всей сцене? Двигайте только по Х...

3p.station 12.02.2011 16:37

очень глючная тема этот стартдраг

я обычно пользуюсь чем то таким
Код AS3:

         private function initListeners(event:Event):void
                {
                        _scroll.addEventListener(MouseEvent.MOUSE_DOWN, onDown);
                }
 
                private function onDown(event:MouseEvent):void
                {
                        _xOffset =  mouseX -_scroll.x;
                        stage.addEventListener(MouseEvent.MOUSE_UP, onUp);
                        addEventListener(Event.ENTER_FRAME, render);
                }
 
                private function render(event:Event):void
                {
                        if(_scroll.x >= 0 && _scroll.x <= _track.width - _scroll.width)
                        {
                                _scroll.x = mouseX - _xOffset;
                        }
                        if(_scroll.x < 0)_scroll.x = 0;
                        if(_scroll.x > _track.width - _scroll.width)_scroll.x = _track.width - _scroll.width;
                }
 
                private function onUp(event:MouseEvent):void
                {
                        stage.removeEventListener(MouseEvent.MOUSE_UP, onUp);
                        removeEventListener(Event.ENTER_FRAME, render);
                }


DZHETIGAPA 12.02.2011 21:53

Вот пример со СтартДрэг
Код AS3:

startDrag(false, new Rectangle(0, 0, 50, 0));

Можно использовать и обработчики событий MOUSE_UP и MOUSE_MOVE вместе с TweenLite, например. Завязка будет осуществляться к mouseX

mikhailk 12.02.2011 22:21

Я лично использую для скроллеров вариант аналогичный решению 3p.station'а (пост №3).
Тем более, что функция расчета смещения с учетом границ все равно нужна, когда привязываешь скролер к колесику мыша. Так что никакого выигрыша при использовании startDrag/stopDrag применительно к скроллерам нет. Даже наоборот.


Часовой пояс GMT +4, время: 02:13.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.