Вход

Просмотр полной версии : Класс "скролбар"


vitalian
19.04.2008, 05:13
Приветствую уважаемого All'a.
Помогите доработать класс, создающий окно со скроллбаром под массив мувиклипов.

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


Вопрос первый: такая структура мне кажется несколько корявой; наверняка вы делали скроллбары, как вы решали этот момент?
Я хотел в первом действии создать массив мувиков и поместить его на подложку, лежащую на _root; затем эту подложку передать конструктору окна со скроллом, конструктор отрисует окошки, изымет подложку с клипами с _root и вставит ее на место клип-тела.
Но как переносить клипы с содержимым с одной "базы" на другую, как переназначать им парентов?..

Вопрос второй, чисто технический.
В предложенном примере массив мувиклипов заполняется рисованными цветными шариками радиусом 20; шарики лепятся вплотную друг к другу. Но клип-тело прокручивается немножко дальше своей длины - если сделать скажем 200 шариков, и прокрутить до конца, в конце останется пустое место на целый дополнительный шарик.
В чем дело?..
имхо, "дыра" банальная, в расчете либо длины ползунка, либо коэффициента смещения. Просто глаз замылился...


Код в аттаче.
scrollbar и mySphere - классы, код из fla.as копируете во fla.

vitalian
21.04.2008, 16:58
Ап, наверно?..
Товарищи, неужели никому нечего сказать?

etc
21.04.2008, 16:59
Плюс за ап.

Смольный (Smolniy)
21.04.2008, 21:31
Первое - все правильно, "перенести" объекты нельзя (по крайней мере, кроме пересоздания я метода не знаю)

vitalian
21.04.2008, 23:54
Смольный (Smolniy)
понятно...
а может, можно как-то по-другому скроллбар сконструировать?
мне не нравится сама последовательность - сначала создается окно прокрутки, потом в него создаются объекты, потом снова обращение к окну и вызов метода... Погоня за двумя зайцами.

GFreemen
22.04.2008, 15:34
я делал так:
1.Сначала создавал клип-контейнер где будет отображение
2. Потом создавал клип-маску для этого контейнера - это видимая область
3. Потом, паралельно им, атачил клип-скрол. У него в классе скролл позиционируется относительно отношения маски к контейнеру. Если размеры контейнера изменяются - у скрола есть метод для перрерисования его.

vitalian
23.04.2008, 03:29
GFreemen
То есть разделить контейнер и скроллбар, создавать их не в одном классе?
Оригинально, спасибо)) Получилось действительно удобнее.
В аттаче box, mySphere и scrollbar2 - классы, fla - код документа.

Разобрался (условно) с тем, почему при большом количестве клипов в контейнере прокрутка работает неточно. Коэффициент смещения клип-тела завязан на длину "пробега" ползунка, тот считается с дробными долями, и корректно его отобразить флэш не может. Погрешность составляет 1% радиуса шара, при двухстах шариках это аккурат один "лишний" или "недостающий", плюс-минус.