Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Бесконечная 2D карусель (http://www.flasher.ru/forum/showthread.php?t=145133)

MadEx 30.09.2010 01:55

Бесконечная 2D карусель
 
Доброго времени суток, форумчане.

Передо мною встала следующая задача:
У меня есть мувик, его длина зависит от числа элементов в нем. Я сделал его прокрутку влево и вправо, чтобы можно было его двигать, когда он не влезает в рабочую область.

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

Сам мувик состоит из некоторого числа элементов. Я пробовал по достижению координаты х соответствующего значения переносить первый элемент в самый конец, но если элементов мало, то переносится тот, который ещё в видимой области, а на его прежнем месте образуется пустота.

Как мне правильно продублировать элемент?
Может есть способ проще сделать такую бесконечную прокрутку по кругу?

in4core 30.09.2010 02:28

Вариант тока один - после полной прокрутки до конца переносить скроллер в начало опять.

derhab 30.09.2010 09:29

Цитата:

Сообщение от MadEx (Сообщение 939625)
Как мне правильно продублировать элемент?

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

Добавлено через 1 минуту
Цитата:

Сообщение от in4core (Сообщение 939632)
Вариант тока один - после полной прокрутки до конца переносить скроллер в начало опять.

переносить?

NAO111 30.09.2010 11:24

Сделай проверку на кол-во элементов. Если все они помещаются в область, то не делай никакой карусели.

Если все-же карусель так необходима, то показывай на сцене в один момент времени разное кол-во элементов, в зависимости от их ОБЩЕГО кол-ва, например:

есть у тебя 10 элементов и по ТЗ тебе надо показывать одновременно на сцене 3 эл-та, то:

| Э1 Э2 Э3 | Э4 Э5 Э6 Э7 Э8 Э9 Э10
Э1 | Э2 Э3 Э4 | Э5 Э6 Э7 ...
Э2 Э3 Э4 Э5 Э6 Э7 Э8 | Э9 Э10 Э1 |

Тут проблем, как я понял нету.
Ну а если элемента всего 3, то показывай в один момент времени только 2 элемента:

|Э1 Э2| Э3
Э1 |Э2 Э3|
Э2 |Э3 Э1|

А если элемента всего 2, то показывай в один момент времени на сцене только 1 элемент

MadEx 30.09.2010 15:00

http://madex-design.ru/kyboe/ - вот мой ролик.

http://madex-design.ru/kyboe/flash.jpg

Есть мувиклип всего спектра со всем часами. Он шире сцены, когда загружается. Я сделал его прокрутку, если навести на затемнённые области курсор. Часов порядка 50 штук. Будут добавляться новые со временем.

Этот мувиклип состоит из 8 участков спектра, каждый из которых соответствует цвету часов. И каждый мувиклип участка спектра состоит из мувиклипов часов этого цвета и картинки участка спектра, которая лежит в лоадере. Мувиклип каждых часов тоже состоит из лоадера.

http://madex-design.ru/kyboe/specpart.jpg

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


Моя проблема заключается в том, что я не знаю, сколько часов какого цвета будет, поэтому если при прокрутке вправо переносить крайний левый участок спектра вправо может получиться так, что слева будет пустота. Поэтому его нужно копировать вправо, а потом, когда левый такой же исчезнет за границей сцены - удалять левый. Вот как его правильно скопировать, я и не знаю!

Может стоит 2 раза добавить весь спектр и перемещать его влево и враво от того, который попадает в сцену? Правда я не знаю минимальное число часов в 1 серии. ведь если оставить только одну включенной, то может получиться так, что весь спектр будет короче чем ширина сцены.


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

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