Показать сообщение отдельно
Старый 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.