Форум 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=144094)

iillyyaa 02.09.2010 18:16

Несколько вопросов про прокрутку
 
создал я контейнер, создал 2 кнопки (вверх, вниз), создал элемент полоска_прокрутки.. возникли вопросы...

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


что бы сдвинуть бегунок прокрутки запускаем слушатель онклик, а дальше что ? как лучше отслеживать движение мышки ? добавить общий слушатель на всё рабочее пространство ?
тоесть, запускаем слушатель на всем экране, если нажимается кнопка на бегунке, меняем какую то переменную и слушатель экрана начинает двигать контейнер ?
или же слушатель онмув лучше добавить в функцию MOUSE_DOWN ? а в MOUSE_UP удалить слушатель уже..

zuxul 02.09.2010 18:54

В слушателе mouse_down добавляшь на stage слушателей на mouse_up и mouse_move.
В mouse_up отписываешься от собыитий mouse_up и mouse_move.
В mouse_move шевелишь свой контейнер и бегунок.

iillyyaa 02.09.2010 20:14

zuxul, я не стал делать слушатель mouse_up, я в mouse_move проверяю нажата ли кнопка..

в принципе с бегунком я разобрался, вроде всё работает..


кто что скажет, про кнопки вниз - вверх ?

zuxul 03.09.2010 10:46

Ты, вроде бы, все правильно написал про кнопки, как вариант, можно использовать ENTER_FRAME вместо таймера...

Wolsh 03.09.2010 11:44

Не, не стóит. События таймера позволяют использовать принудительную перерисовку (updateAfterEvent) и получить таким образом более плавное скольжение.
Насчет проверки кнопок при движениях мыши - не слишком ли? Зачем столько холостой работы.
Может это поможет осмыслить картину..

iillyyaa 03.09.2010 14:27

Код AS3:

scroller_barr.addEventListener(MouseEvent.MOUSE_DOWN, scroller_do_move_bar_start);
 
private function scroller_do_move_bar_start(event:MouseEvent):void {
        scroller_y = event.stageY;
        stage.addEventListener(MouseEvent.MOUSE_MOVE, scroller_do_move_bar_move);
}
private function scroller_do_move_bar_move(event:MouseEvent):void {
        if (event.buttonDown == true) {
                // тут определяем текущие координаты мыши, и двигаем скрол и содержимое контейнера
        } else {
                stage.removeEventListener(MouseEvent.MOUSE_MOVE, scroller_do_move_bar_move);
        }
}

с бегунком вроде сделал всё нормально, не вижу никакой проблемы проверять постоянно нажата ли кнопка.. event.buttonDown если кнопка перестала быть нажатой, удаляем слушатель онмув и всё

осталось придумать, как лучше двигать всё это по нажатию на кнопки вверх-вниз
пока просто онклик сделал и двигаю на 5 пиксел за клик :)

Добавлено через 5 минут
что то не понял, как ENTER_FRAME использовать вместо таймера ? можно пару строк кода ?

Psycho Tiger 03.09.2010 15:46

Цитата:

Не, не стóит. События таймера позволяют использовать принудительную перерисовку (updateAfterEvent) и получить таким образом более плавное скольжение.
Wolsh, если честно совсем не понял каким боком тут таймер. Если нужно двигать объект плавно - то лучше это делать по ENTER_FRAME (Timer на частоту 1000/31 ~=33 на мой взгляд это не очень). Какими соображениями ты пользуешься?

iillyyaa, ну просто подписаться не на TimerEvent.TICK, а не Event.ENTERFRAME =)
И подход что то не очень:
По клику подписываемся и на MOUSE_UP и на MOUSE_MOVE у stage. По MOUSE_UP удаляем и то и другое.

Wolsh 03.09.2010 16:17

Да вообще для скроллера нормально и 31 фпс. Вообще таймер я использую скорее из-за врожденной неприязни к "мувиклипному" ентерфрейму, ну и частота у меня обычно повыше, 10-20 мс. Но в целом это концепции и личные заморочки. В данном случае при фпс 31 сойдет и ентерФрейм.

Psycho Tiger 03.09.2010 16:21

На мой взгляд ENTER_FRAME удачней. Он так и так распространяется (ну, во всяком случае бежит проверка на hasEventListener), вместо этого идёт создание таймера и ещё принудительная перерисовка экрана, а потом ещё одна нативно по ENTER_FRAME. Так что не соглашусь.

Wolsh 03.09.2010 16:48

Ну я бы не стал так бояться перегрузки, речь вроде не о 3D-шутере, а о перемотке страницы. И как я сказал, я согласен с 31 фпс, не надо меня уже бить)) Просто таймеры мне симпатичней, их можно стартовать и останавливать, их можно понятно назвать и сделать код сказкой, а не ломать голову, чего там понавешано на ентерФрейм (повторюсь, тут еще старый страх перед ас2шным ентерфреймом, который переопределяли или обнуляли, и надо было всегда помнить, что еще там на него навешано, чтобы это не потерять)) С таймером код логичней для меня, и мне как-то чаще приходится работать не с движением, а с альфой и т.п., и там мне хочется других частот. А движок скроллера может двигаться хоть рывками по 5 пикселей - никто не докажет, что это баг а не фича.


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

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