![]() |
Несколько вопросов про прокрутку
создал я контейнер, создал 2 кнопки (вверх, вниз), создал элемент полоска_прокрутки.. возникли вопросы...
я так понимаю, нажав на кнопку вверх или вниз нужно запускать таймер, который будет потихоньку двигать этот контейнер (т.к. нам надо ведь не 1 раз сдвинуть на 5 пикселей, а постоянно, пока нажата кнопка), при отпускании кнопки удаляем таймер что бы сдвинуть бегунок прокрутки запускаем слушатель онклик, а дальше что ? как лучше отслеживать движение мышки ? добавить общий слушатель на всё рабочее пространство ? тоесть, запускаем слушатель на всем экране, если нажимается кнопка на бегунке, меняем какую то переменную и слушатель экрана начинает двигать контейнер ? или же слушатель онмув лучше добавить в функцию MOUSE_DOWN ? а в MOUSE_UP удалить слушатель уже.. |
В слушателе mouse_down добавляшь на stage слушателей на mouse_up и mouse_move.
В mouse_up отписываешься от собыитий mouse_up и mouse_move. В mouse_move шевелишь свой контейнер и бегунок. |
zuxul, я не стал делать слушатель mouse_up, я в mouse_move проверяю нажата ли кнопка..
в принципе с бегунком я разобрался, вроде всё работает.. кто что скажет, про кнопки вниз - вверх ? |
Ты, вроде бы, все правильно написал про кнопки, как вариант, можно использовать ENTER_FRAME вместо таймера...
|
Не, не стóит. События таймера позволяют использовать принудительную перерисовку (updateAfterEvent) и получить таким образом более плавное скольжение.
Насчет проверки кнопок при движениях мыши - не слишком ли? Зачем столько холостой работы. Может это поможет осмыслить картину.. |
Код AS3:
осталось придумать, как лучше двигать всё это по нажатию на кнопки вверх-вниз пока просто онклик сделал и двигаю на 5 пиксел за клик :) Добавлено через 5 минут что то не понял, как ENTER_FRAME использовать вместо таймера ? можно пару строк кода ? |
Цитата:
iillyyaa, ну просто подписаться не на TimerEvent.TICK, а не Event.ENTERFRAME =) И подход что то не очень: По клику подписываемся и на MOUSE_UP и на MOUSE_MOVE у stage. По MOUSE_UP удаляем и то и другое. |
Да вообще для скроллера нормально и 31 фпс. Вообще таймер я использую скорее из-за врожденной неприязни к "мувиклипному" ентерфрейму, ну и частота у меня обычно повыше, 10-20 мс. Но в целом это концепции и личные заморочки. В данном случае при фпс 31 сойдет и ентерФрейм.
|
На мой взгляд ENTER_FRAME удачней. Он так и так распространяется (ну, во всяком случае бежит проверка на hasEventListener), вместо этого идёт создание таймера и ещё принудительная перерисовка экрана, а потом ещё одна нативно по ENTER_FRAME. Так что не соглашусь.
|
Ну я бы не стал так бояться перегрузки, речь вроде не о 3D-шутере, а о перемотке страницы. И как я сказал, я согласен с 31 фпс, не надо меня уже бить)) Просто таймеры мне симпатичней, их можно стартовать и останавливать, их можно понятно назвать и сделать код сказкой, а не ломать голову, чего там понавешано на ентерФрейм (повторюсь, тут еще старый страх перед ас2шным ентерфреймом, который переопределяли или обнуляли, и надо было всегда помнить, что еще там на него навешано, чтобы это не потерять)) С таймером код логичней для меня, и мне как-то чаще приходится работать не с движением, а с альфой и т.п., и там мне хочется других частот. А движок скроллера может двигаться хоть рывками по 5 пикселей - никто не докажет, что это баг а не фича.
|
| Часовой пояс GMT +4, время: 06:45. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.