![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: May 2008
Сообщений: 28
|
Здравствуйте!
Есть скролл 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 продолжает прокручиваться, при этом при разной скорости движения колеса он двигается по-разному. пробовала менять формулу, максимальные и минимальные значения, ставила разные числа, придумывала переменные - ничего не выходит толком. мне кажется, это движение должно зависить от того, во сколько раз объект длинее области прокрутки, но не разобраться. мой вопрос: можно ли изменить существующую формулу, чтобы все работало как надо? если да, то как? если нет, как мне именно в моем случае сделать прокрутку колесом? |
|
|||||
|
Регистрация: May 2008
Сообщений: 28
|
спасибо)) но у меня проблемы именно с этим перемещением.
надо как-то связать перемещение двух объектов, чтоб к тому времени когда один дошел до конца, другой бы тоже подошел к завершению. не взирая на их разный размер и путь. у меня крайне мало опыта в программировании, в том числе на экшн скртип, поэтому я не знаю как. хотя, по сути, это математическая задачка, но мне ее не решить. |
|
|||||
|
Регистрация: May 2008
Сообщений: 28
|
может быть кто-то может помочь примерами хорошо работающей прокрутки колесом в похожем случае (когда есть клипы объект, ползунок, область прокрутки и все события происходят с ними)
|
|
|||||
|
http://www.flasher.ru/forum/showthread.php?t=111891
отличный скроллинг |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
ogonek, возможно Вы скачали мой скроллер из предложенной темы. Я пожалуй поясню свои формулы, ибо Вам нужно понимание а не чужой исходник)
Я сам впервые столкнулся с необходимостью запрограммировать скроллер довольно давно, и перепробовал разные подходы, пока не остановился на простой и очевидной вещи - смотрите: 1) Положение целевого клипа (таргета) полностью согласуется с положением движка 2) Движок - то, что мы двигаем руками, кнопками и колесиком. Т.е. его положение зависит от нескольких факторов, его поведение гораздо сложнее чем у таргета. При этом его размеры, лимиты перемещения, координаты и прочие свойства нам известны заранее. 3) Значит мы должны работать не с таргетом, а с движком. После всех операций по перемещению движка и проверки его лимитов мы просто перемещаем таргет в соответствующие движку координаты. Тогда неважно, чем и как мы двигали движок - может быть даже скриптом, листающим текст на нужный абзац))) Главное - правильно двигать движок и вывести формулу, учитывающую его размеры - если Вы меняете его высоту в зависимости от высоты таргета (длины текста). 4) Тогда нетрудно проверить, не вышел ли движок за лимиты, и если вышел - вернуть его в границы. Поскольку это ограничение действует в любом случае, его можно поместить в одну конечную функцию перемещения движка, а эту функцию вызывать при нажатии на кнопки, трек, при драге движка и при прокрутке колесика мыши. 5) Остается правильно вывести формулу зависимости положения таргета от положения движка. Таргет проходит определенный путь, чтобы в верхней позиции была видна верхняя строчка, а в нижней - нижняя. Этот путь равен высота таргета минус высота маски (окошка). Я назвал его target_way. Таргет должен пройти этот путь, когда движок проходит сверху до низу)) У движка свой путь, и он равен высота скроллера минус высоты кнопок и минус высота движка(!) Назовем его pimp_way. Итак когда движок проходит pimp_way, таргет проходит target_way. Можно вывести коэфициент : target_way / pimp_way. Теперь достаточно умножить СМЕЩЕНИЕ движка на этот коэфициент, и мы узнаем, насколько сместить таргет. Его начальное положение равно координате у маски (окошка). Начальное положение движка равно у скроллера плюс высота кнопки. Если во внутренних координатах, когда кнопка стоит в ноль - просто высоте кнопки. Сохраним эти две константы как таргет_старт и пимп_старт. Итак: таргет._у = таргет_старт - коэфициент * смещение_движка (минус потому что таргет идет вверх, когда движок - вниз) Т.е.
__________________
Reality.getBounds(this); Последний раз редактировалось Wolsh; 21.06.2008 в 01:16. |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:32. |
|
|
« Предыдущая тема | Следующая тема » |
|
|