Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.09.2010, 18:16
iillyyaa вне форума Посмотреть профиль Отправить личное сообщение для iillyyaa Найти все сообщения от iillyyaa
  № 1  
Ответить с цитированием
iillyyaa

Регистрация: Apr 2010
Сообщений: 147
По умолчанию Несколько вопросов про прокрутку

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

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


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


Последний раз редактировалось iillyyaa; 02.09.2010 в 18:29.
Старый 02.09.2010, 18:54
zuxul вне форума Посмотреть профиль Отправить личное сообщение для zuxul Найти все сообщения от zuxul
  № 2  
Ответить с цитированием
zuxul

Регистрация: Dec 2009
Адрес: 59°13′N, 39°54′E
Сообщений: 445
Записей в блоге: 1
В слушателе mouse_down добавляшь на stage слушателей на mouse_up и mouse_move.
В mouse_up отписываешься от собыитий mouse_up и mouse_move.
В mouse_move шевелишь свой контейнер и бегунок.

Старый 02.09.2010, 20:14
iillyyaa вне форума Посмотреть профиль Отправить личное сообщение для iillyyaa Найти все сообщения от iillyyaa
  № 3  
Ответить с цитированием
iillyyaa

Регистрация: Apr 2010
Сообщений: 147
zuxul, я не стал делать слушатель mouse_up, я в mouse_move проверяю нажата ли кнопка..

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


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

Старый 03.09.2010, 10:46
zuxul вне форума Посмотреть профиль Отправить личное сообщение для zuxul Найти все сообщения от zuxul
  № 4  
Ответить с цитированием
zuxul

Регистрация: Dec 2009
Адрес: 59°13′N, 39°54′E
Сообщений: 445
Записей в блоге: 1
Ты, вроде бы, все правильно написал про кнопки, как вариант, можно использовать ENTER_FRAME вместо таймера...

Старый 03.09.2010, 11:44
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Не, не стóит. События таймера позволяют использовать принудительную перерисовку (updateAfterEvent) и получить таким образом более плавное скольжение.
Насчет проверки кнопок при движениях мыши - не слишком ли? Зачем столько холостой работы.
Может это поможет осмыслить картину..
__________________
Reality.getBounds(this);

Старый 03.09.2010, 14:27
iillyyaa вне форума Посмотреть профиль Отправить личное сообщение для iillyyaa Найти все сообщения от iillyyaa
  № 6  
Ответить с цитированием
iillyyaa

Регистрация: Apr 2010
Сообщений: 147
Код 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 использовать вместо таймера ? можно пару строк кода ?

Старый 03.09.2010, 15:46
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 7  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Цитата:
Не, не стóит. События таймера позволяют использовать принудительную перерисовку (updateAfterEvent) и получить таким образом более плавное скольжение.
Wolsh, если честно совсем не понял каким боком тут таймер. Если нужно двигать объект плавно - то лучше это делать по ENTER_FRAME (Timer на частоту 1000/31 ~=33 на мой взгляд это не очень). Какими соображениями ты пользуешься?

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

Старый 03.09.2010, 16:17
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Да вообще для скроллера нормально и 31 фпс. Вообще таймер я использую скорее из-за врожденной неприязни к "мувиклипному" ентерфрейму, ну и частота у меня обычно повыше, 10-20 мс. Но в целом это концепции и личные заморочки. В данном случае при фпс 31 сойдет и ентерФрейм.
__________________
Reality.getBounds(this);

Старый 03.09.2010, 16:21
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 9  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
На мой взгляд ENTER_FRAME удачней. Он так и так распространяется (ну, во всяком случае бежит проверка на hasEventListener), вместо этого идёт создание таймера и ещё принудительная перерисовка экрана, а потом ещё одна нативно по ENTER_FRAME. Так что не соглашусь.

Старый 03.09.2010, 16:48
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 10  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Ну я бы не стал так бояться перегрузки, речь вроде не о 3D-шутере, а о перемотке страницы. И как я сказал, я согласен с 31 фпс, не надо меня уже бить)) Просто таймеры мне симпатичней, их можно стартовать и останавливать, их можно понятно назвать и сделать код сказкой, а не ломать голову, чего там понавешано на ентерФрейм (повторюсь, тут еще старый страх перед ас2шным ентерфреймом, который переопределяли или обнуляли, и надо было всегда помнить, что еще там на него навешано, чтобы это не потерять)) С таймером код логичней для меня, и мне как-то чаще приходится работать не с движением, а с альфой и т.п., и там мне хочется других частот. А движок скроллера может двигаться хоть рывками по 5 пикселей - никто не докажет, что это баг а не фича.
__________________
Reality.getBounds(this);

Создать новую тему Ответ Часовой пояс GMT +4, время: 11:30.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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