Показать сообщение отдельно
Старый 17.05.2007, 21:20
WindWalker вне форума Посмотреть профиль Отправить личное сообщение для WindWalker Найти все сообщения от WindWalker
  № 1  
Ответить с цитированием
WindWalker

Регистрация: Nov 2006
Сообщений: 223
По умолчанию Как загрузить и размножить?

Хочется мне красивое решение следующей задачки стандартными средствами. И желательно, чтобы шустро работало.

Из внешнего источника загружается картинка (грубо говоря, текстура).
Она каким-то образом трансформируется (поворт, сдвиг и т.д.) и помещается на мувик.

После этого нужно наклепать произвольное количество копий данного мувика.

В AS 2.0 задача была решена несколько ректально: в мувик загружалась текстура, сам мувик трансформировался.
Затем создавался битмап, на нём рисовался битмап и уже этот битмап нашлёпывал везде, где надо.

Слегка почитав про AS 3.0 я было уже обрадывался, что есть более красивое решение (благо появились off-screen мувики и спрайты).
Но почитав хелп подробнее, я не обнаружил способа клонировать мувики.
duplicateMovie и attachMovie удалили, а вот никакого clone() взамен вроде бы не дали.

Ещё раз задачу, немного более формально.

Требуется отобразить на экране N спрайтов, имеющих разные x, y и "z", но одинаковое графическое содержимое.
Причём содержимое состоит из загружаемой графики.
Загрузка должна производиться только один раз.


Пока писал сообщение, родилась одна мысля - создать несколько спрайтов-контейнеров с разными координатами и в них добавлять спрайт-оригинал.
Т.е. что-то вроде такого:
Код:
// спрайт-оригинал. пока просто рисованный
var original = new Sprite();
original.graphics.beginFill(0xff0000,1);
original.graphics.drawRect(0,0,100,100);
original.graphics.endFill();

// создаём два контейнера
var container1 = new Sprite();
var container2 = new Sprite();

container1.addChild(original);
container2.addChild(original);

// один из них правее
holder1.x = 150;

// и отображаем
this.addChild(container1);
this.addChild(container2);
Ничего не вышло. Видимо, любой спрайт может принадлежать только одному спрайту.
А клонировать нельзя, да это бы и плохо сказалось на потреблении памяти...
Так есть ли какой-то способ?