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

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

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

Регистрация: May 2008
Сообщений: 28
Question проблемы с синхронизацией скролла по onMouseWheel

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

Есть скролл

Код:
if (obj_mc._height<375)
   {
	scroll_mc._alpha=0;
	line._alpha=0;
	mask_mc._alpha=0;}

else if (obj_mc._height>375)
{

obj_mc.setMask(mask_mc);

var varDif:Number = obj_mc._height- mask_mc._height;
scroll_mc.onPress = function() {
	this.gotoAndStop(2);
	this.startDrag(false, this._x, 0, this._x, mask_mc._height-this._height);
	this.onMouseMove = function() {
		
		this._parent.obj_mc._y = -this._parent.varDif*(this._y/mask_mc._height);
	};
};
scroll_mc.onRelease = scroll_mc.onReleaseOutside=function () {
	this.gotoAndStop(1);
	this.stopDrag();
	delete this.onMouseMove;
};

}

var scrollHeight:Number = mask_mc._height - 50;
var varScroll:Number = obj_mc._height/mask_mc._height;

var mouseListener:Object = new Object();

var minY:Number = 0;
var maxY:Number = scrollHeight;
var step:Number = 10;

var minZ:Number = -varDif;
var maxZ:Number = 0;
var step:Number = 40*varScroll;

mouseListener.onMouseWheel = function(delta) {
   scroll_mc._y = Math.min(Math.max(scroll_mc._y + step * - delta / Math.abs(delta), minY), maxY);
   obj_mc._y = Math.min(Math.max(obj_mc._y + step *  delta / Math.abs(delta), minZ), maxZ);
}
Mouse.addListener(mouseListener);
то что касается колесика мыши я выделила.

все работает, но при прокрутке когда ползунок уже дошел до конца текст в клипе obj_mc продолжает прокручиваться, при этом при разной скорости движения колеса он двигается по-разному.

пробовала менять формулу, максимальные и минимальные значения, ставила разные числа, придумывала переменные - ничего не выходит толком.

мне кажется, это движение должно зависить от того, во сколько раз объект длинее области прокрутки, но не разобраться.

мой вопрос:

можно ли изменить существующую формулу, чтобы все работало как надо?
если да, то как?

если нет, как мне именно в моем случае сделать прокрутку колесом?

Старый 20.06.2008, 17:54
MrPoma вне форума Посмотреть профиль Отправить личное сообщение для MrPoma Посетить домашнюю страницу MrPoma Найти все сообщения от MrPoma
  № 2  
Ответить с цитированием
MrPoma
 
Аватар для MrPoma

Регистрация: Jul 2006
Адрес: Питер
Сообщений: 2,083
Отправить сообщение для MrPoma с помощью Skype™
Я бы посоветовал завести функцию moveObject() и все действия по перемещению объекта вынести туда.
__________________
жж | твттр | гглплс | фсбк | вкнткт | гтхб

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

Регистрация: May 2008
Сообщений: 28
спасибо)) но у меня проблемы именно с этим перемещением.
надо как-то связать перемещение двух объектов, чтоб к тому времени когда один дошел до конца, другой бы тоже подошел к завершению. не взирая на их разный размер и путь.

у меня крайне мало опыта в программировании, в том числе на экшн скртип, поэтому я не знаю как. хотя, по сути, это математическая задачка, но мне ее не решить.

Старый 20.06.2008, 20:56
ogonek вне форума Посмотреть профиль Отправить личное сообщение для ogonek Найти все сообщения от ogonek
  № 4  
Ответить с цитированием
ogonek

Регистрация: May 2008
Сообщений: 28
может быть кто-то может помочь примерами хорошо работающей прокрутки колесом в похожем случае (когда есть клипы объект, ползунок, область прокрутки и все события происходят с ними)

Старый 20.06.2008, 21:19
BBOY Ильич вне форума Посмотреть профиль Отправить личное сообщение для BBOY Ильич Найти все сообщения от BBOY Ильич
  № 5  
Ответить с цитированием
BBOY Ильич
 
Аватар для BBOY Ильич

Регистрация: Nov 2007
Сообщений: 256
Записей в блоге: 1
Отправить сообщение для BBOY Ильич с помощью ICQ
http://www.flasher.ru/forum/showthread.php?t=111891
отличный скроллинг

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
ogonek, возможно Вы скачали мой скроллер из предложенной темы. Я пожалуй поясню свои формулы, ибо Вам нужно понимание а не чужой исходник)
Я сам впервые столкнулся с необходимостью запрограммировать скроллер довольно давно, и перепробовал разные подходы, пока не остановился на простой и очевидной вещи - смотрите:
1) Положение целевого клипа (таргета) полностью согласуется с положением движка
2) Движок - то, что мы двигаем руками, кнопками и колесиком. Т.е. его положение зависит от нескольких факторов, его поведение гораздо сложнее чем у таргета. При этом его размеры, лимиты перемещения, координаты и прочие свойства нам известны заранее.
3) Значит мы должны работать не с таргетом, а с движком. После всех операций по перемещению движка и проверки его лимитов мы просто перемещаем таргет в соответствующие движку координаты. Тогда неважно, чем и как мы двигали движок - может быть даже скриптом, листающим текст на нужный абзац))) Главное - правильно двигать движок и вывести формулу, учитывающую его размеры - если Вы меняете его высоту в зависимости от высоты таргета (длины текста).
4) Тогда нетрудно проверить, не вышел ли движок за лимиты, и если вышел - вернуть его в границы. Поскольку это ограничение действует в любом случае, его можно поместить в одну конечную функцию перемещения движка, а эту функцию вызывать при нажатии на кнопки, трек, при драге движка и при прокрутке колесика мыши.
5) Остается правильно вывести формулу зависимости положения таргета от положения движка. Таргет проходит определенный путь, чтобы в верхней позиции была видна верхняя строчка, а в нижней - нижняя. Этот путь равен высота таргета минус высота маски (окошка). Я назвал его target_way. Таргет должен пройти этот путь, когда движок проходит сверху до низу)) У движка свой путь, и он равен высота скроллера минус высоты кнопок и минус высота движка(!) Назовем его pimp_way.
Итак когда движок проходит pimp_way, таргет проходит target_way. Можно вывести коэфициент : target_way / pimp_way. Теперь достаточно умножить СМЕЩЕНИЕ движка на этот коэфициент, и мы узнаем, насколько сместить таргет. Его начальное положение равно координате у маски (окошка). Начальное положение движка равно у скроллера плюс высота кнопки. Если во внутренних координатах, когда кнопка стоит в ноль - просто высоте кнопки. Сохраним эти две константы как таргет_старт и пимп_старт. Итак:
таргет._у = таргет_старт - коэфициент * смещение_движка (минус потому что таргет идет вверх, когда движок - вниз)
Т.е.
Код:
таргет._у = таргет_старт - (target_way / pimp_way) * (пимп._у - пимп_старт)
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 21.06.2008 в 01:16.
Создать новую тему Ответ Часовой пояс GMT +4, время: 22:32.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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