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

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

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

Регистрация: Nov 2010
Сообщений: 430
Question Прокрутка как на iPad

Здравствуйте.

Ситуация:
Допустим, есть длинный нарисованный состав из 100 вагонов, на сцену (шириной 500) влезает только 5 вагонов, нужно организовать прокрутку "как в айПаде", т.е. зацепил один вагон мышкой, повел в сторону и спроисходит смещение - становятся видны следующие/предыдущие вагоны. Кроме того, по-моему (ни айПада, ни айФона у меня нет) там есть что-то вроде инерции - чем быстрее вел, тем дольше продолжается движение после того, как отпустил объект.
Вопрос:
Есть ли у кого-нить наметки, как это делается, или примеры, или ссылки на похожие статьи? Во флеше не так давно, так что подойдут материалы "для чайников" )

Старый 27.04.2011, 12:04
bav вне форума Посмотреть профиль Отправить личное сообщение для bav Найти все сообщения от bav
  № 2  
Ответить с цитированием
bav
 
Аватар для bav

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Могу предложить направление изысканий. Вам потребуется прослушка событий MouseEvent.MOUSE_DOWN, MouseEvent.MOUSE_UP и MouseEvent.MOUSE_MOVE. В слушателе MOUSE_MOVE вам нужно будет считывать координаты мыши и, исходя из них, считать скорость прокрутки. Зная скорость прокрутки, вы сможете реализовать инерцию. Кроме того можете добавить эффект смазывания, воспользовавшись flash.filters.BlurFilter.

Старый 27.04.2011, 12:12
Tr1te вне форума Посмотреть профиль Отправить личное сообщение для Tr1te Найти все сообщения от Tr1te
  № 3  
Ответить с цитированием
Tr1te
 
Аватар для Tr1te

Регистрация: Jun 2009
Сообщений: 461
Еще пригодится библиотека для плавной анимации перемещения: http://www.greensock.com/

Старый 27.04.2011, 13:38
Cornford вне форума Посмотреть профиль Отправить личное сообщение для Cornford Найти все сообщения от Cornford
  № 4  
Ответить с цитированием
Cornford

Регистрация: Oct 2009
Сообщений: 174
чтобы узнать скорость прокрутки, к примеру, можно сравнивать предыдущее и последующее положение (смещение) мыши в определенные отсчеты времени.

Старый 27.04.2011, 16:06
Srednas вне форума Посмотреть профиль Отправить личное сообщение для Srednas Найти все сообщения от Srednas
  № 5  
Ответить с цитированием
Srednas

Регистрация: Nov 2010
Сообщений: 430
Спасибо )
Сделал так:
Код AS3:
// при нажатии на поезд
function pickupTrain(e:MouseEvent):void{
		wasMouseX = mouseX;   // координата, в которой произощел "зацеп" поезда
		stage.addEventListener(MouseEvent.MOUSE_MOVE, changeXY);   // слушатель на перемещение мыши
}
 
// функция изменения кординат при перетаскивании
function changeXY(e:MouseEvent):void{
		speedTrain = wasMouseX - mouseX   // вычисление скорости мыши
		this.Train.x -= speedTrain;   // движение поезда со скоростью мыши
		Mouse.cursor = MouseCursor.HAND;  // смена курсора
		e.updateAfterEvent();  // упдейт
		wasMouseX = mouseX; // перезапоминаем координату
}
 
// при отпускании поезда
function  releaseTrain(e:MouseEvent):void{
		stage.removeEventListener(MouseEvent.MOUSE_MOVE, changeXY);  // удаляем слушатель
		Mouse.cursor = MouseCursor.AUTO;   // смена курсора
}
поезд движется хорошо, но возникает вопрос:
как добавить инерцию после отпускания?

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

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Цитата:
как добавить инерцию после отпускания?
Школьный курс физики, раздел "Кинематика". Имеем начальную скорость (v0) и некоторое ускорение (a) с обратным знаком. По известной формуле x = x0 + v0*t + (a*t^2)/2 рассчитываем положения поезда в нужный момент времени.

Старый 27.04.2011, 17:51
fljot вне форума Посмотреть профиль Отправить личное сообщение для fljot Найти все сообщения от fljot
  № 7  
Ответить с цитированием
fljot

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
Не обижайтесь, но работу подобного кода можно охарактеризовать только нехорошим словом. Сам так делал как-то =) Не вздумайте такие скроллы лепить на тач-устройства. Нужно учитывать случайный сдвиг при касании (не относится к мышке), нужно сглаживать-аппроксимировать скорость броска, надо делать грамотный(по ощущениям) pull и bounce, и всякие другие мелкие нюансы...

Старый 28.04.2011, 07:53
Srednas вне форума Посмотреть профиль Отправить личное сообщение для Srednas Найти все сообщения от Srednas
  № 8  
Ответить с цитированием
Srednas

Регистрация: Nov 2010
Сообщений: 430
Цитата:
Сообщение от fljot Посмотреть сообщение
Не обижайтесь, но работу подобного кода можно охарактеризовать только нехорошим словом. Сам так делал как-то =) Не вздумайте такие скроллы лепить на тач-устройства. Нужно учитывать случайный сдвиг при касании (не относится к мышке), нужно сглаживать-аппроксимировать скорость броска, надо делать грамотный(по ощущениям) pull и bounce, и всякие другие мелкие нюансы...
Спасибо за замечание ) Обижаться тут не на что - если код недостаточно хороший, его исправлять нужно. Есть ли у вас пример или ссылка на пример, где применяется аппроксимация и прочие нюансы? И что конкретно плохо, почему?

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

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
Можно посмотреть исходники нового флексового Scroller, там учитывается довольно много. Архитектура дебильная, чего-то не хватает, но посмотреть стоит. Я своё готовое решение пока не готов шарить.

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

Регистрация: Nov 2010
Сообщений: 430
Цитата:
Сообщение от fljot Посмотреть сообщение
Я своё готовое решение пока не готов шарить.
Ну как только решение созреет, дайте знать )))

Добавлено через 15 часов 27 минут
Пока сделал так. Работает. Не айПад, конечно, но работает.

Код AS3:
// при нажатии на поезд
function pickupTrain(e:MouseEvent):void{
		tweenTrain.stop();
		wasMouseX = mouseX;
		stage.addEventListener(MouseEvent.MOUSE_MOVE, changeXY);
}
 
// функция изменения кординат при перетаскивании
function changeXY(e:MouseEvent):void{
		speedTrain = wasMouseX - mouseX
		this.Train.x -= speedTrain;
		Mouse.cursor = MouseCursor.HAND;
		e.updateAfterEvent();
		wasMouseX = mouseX;
}
 
// при отпускании поезда
function  releaseTrain(e:MouseEvent):void{
 
		if (tweenTrain.isPlaying){
				tweenTrain.continueTo((this.Train.x - speedTrain*20), tweenTime);
		}
		else{	
				tweenTrain = new Tween(this.Train, "x", Strong.easeOut, this.Train.x, (this.Train.x - speedTrain*20), tweenTime, true);
		}
		speedTrain = 0;
		stage.removeEventListener(MouseEvent.MOUSE_MOVE, changeXY);
		Mouse.cursor = MouseCursor.AUTO;
}

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

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

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


 


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


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