Надеюсь, кто-нибудь сможет мне здесь помочь.
Я работаю во встроенной среде ActionScript2 и FlashLite 3.0 (вне браузера). Приложение, которое я разрабатываю, многократно использует контейнеры мувиклипов, которые содержат внешние изображения, которые загружаются в эти клипы с помощью loadMovie. Помещение изображений в библиотеку и использование attachMovie не является вариантом, потому что изображения могут быть загружены пользователем и должны загружаться динамически извне Flash. Среда, в которой я работаю, очень ограничена, и при многократной загрузке этих внешних изображений с помощью loadMovie, когда многие из этих контейнеров мувиклипов одновременно отображаются на экране, наблюдается заметное снижение производительности.
Я хотел бы иметь способ загрузить внешнее изображение в контейнер мувиклипа один раз, а затем многократно использовать копии этого мувиклипа в различных точках приложения, что устранило бы необходимость постоянно загружать внешние изображения каждый раз.
Сначала я подумал, что ответ будет довольно простым, если использовать duplicateMovieClip, но, к сожалению, похоже, что duplicateMovieClip не дублирует какие-либо свойства или дочерние объекты дублируемого клипа. Насколько я могу судить, каждый раз, когда вы дублируете клип, вам нужно снова загружать внешнее изображение, что в первую очередь лишает смысла это делать.
Я также изучал решения, связанные с AttachBitmap () и кешированием растровых изображений в целом, но, к сожалению, это то, что Adobe, похоже, не поддерживает в Flash Lite 3. (см. «Какие функции Flash 8 не поддерживает Flash Lite 3?» ) http://www.adobe.com/uk/products/flashlite/faq/.
Есть ли у кого-нибудь опыт решения такой проблемы?
Изменить: Пример от Adobe хорошо иллюстрирует ситуацию. Обратите внимание на второй вызов loadMovie после дубликата:
this.createEmptyMovieClip("img_mc", this.getNextHighestDepth());
img_mc.loadMovie("http://www.macromedia.com/images/shared/product_boxes/112x112/box_studio_112x112.jpg");
duplicateMovieClip(img_mc, "newImg_mc", this.getNextHighestDepth());
newImg_mc._x = 200;
newImg_mc.loadMovie("http://www.macromedia.com/images/shared/product_boxes/112x112/box_studio_112x112.jpg");