Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как с помощью loader многократно использовать картинку? (http://www.flasher.ru/forum/showthread.php?t=142025)

Jarproger 10.07.2010 19:00

Как с помощью loader многократно использовать картинку?
 
Допустим, загружена картинка

Код AS3:

public var imgfon = new Loader();
 
var r=new URLRequest("img/fon/water.jpg");
imgfon.load(r);

Чтобы она отобразилась, нужно добавить её к спрайту с помощью addChild
Но при этом нельзя добавить её к множеству спрайтов (у неё возможен всего один родитель).

Как, загрузив один раз, добавить её более чем к одному спрайту, чтобы все они одновременно её отображали?

aliim 10.07.2010 21:16

можно клонировать битмар данные загрузчика, например

Код AS3:

var image2:Bitmap = new Bitmap(Bitmap(imgfon.content).bitmapData.clone(),"auto",true);


Wolsh 10.07.2010 21:35

Цитата:

Чтобы она отобразилась, нужно добавить её к спрайту с помощью addChild
Нет. Ее нужно добавить в список отображения, а будет это спрайт, клип или сам стейдж - без разницы, лишь бы спрайт или клип тоже был "на сцене". Иначе хоть задобавляйтесь.
Цитата:

можно клонировать битмар данные загрузчика, например
Совсем необязательно клонировать. БитмапДата - не дисплейный объект, это фактически массив данных, ИЗ которых строится изображение. Его совершенно не нужно клонировать - можно настряпать сколько угодно дисплейных Битмапов из одной и той же БитмапДаты.

aliim 10.07.2010 22:18

Цитата:

Сообщение от Wolsh (Сообщение 921280)
Нет. Ее нужно добавить в список отображения, а будет это спрайт, клип или сам стейдж - без разницы, лишь бы спрайт или клип тоже был "на сцене". Иначе хоть задобавляйтесь.

насколько я понял, вопрос был в том как добавить данные одного лоадера к двум клипам на сцене. поскольку у лоадера (и его контента) может быть только один родитель, то, если на сцену добавлены два клипа (как addChild), к ним обоим нельзя добавить один лоадер (как addChild). при добавлении лоадера ко второму клипу он пропадет из первого

Цитата:

Сообщение от Wolsh (Сообщение 921280)
Совсем необязательно клонировать. БитмапДата - не дисплейный объект, это фактически массив данных, ИЗ которых строится изображение. Его совершенно не нужно клонировать - можно настряпать сколько угодно дисплейных Битмапов из одной и той же БитмапДаты.

можно и не клонировать, зависит от задачи, можно сделать так (при этом будет использоваться оригинальная битмапДата):

Код AS3:

import flash.display.MovieClip;
import flash.events.Event;
import flash.display.BitmapData;
 
var imgfon = new Loader();
var mc1:MovieClip = new MovieClip  ;
var mc2:MovieClip = new MovieClip  ;
 
var r = new URLRequest("image.jpg");
imgfon.load(r);
imgfon.contentLoaderInfo.addEventListener(Event.COMPLETE, go);
 
function go(e:Event) {
        var bd:BitmapData = Bitmap(imgfon.content).bitmapData;
        mc1.addChild(new Bitmap(bd,"auto",true));
        mc2.addChild(new Bitmap(bd,"auto",true));
}
 
addChild(mc1);
addChild(mc2);


Wolsh 11.07.2010 01:16

1. У Вас класс Битмап не импортирован))
2. Он, в общем-то, и не обязателен. Можно просто залить, если другого содержимого не предполагается.
3. А его и не предполагается - тогда зачем какие-то мувиклипы, если достаточно спрайта или даже шейпа? Зачем грузить память ненужным функционалом?

kackbip 11.07.2010 10:57

Можно так:
1) Загружать массив байт с помощью URLLoader
2) Массив байт по мере необходимости скармливать новому Loader-у

Пример на ошибки не проверен, но подход точно рабочий:

Код AS3:

var urlldr:URLLoader = new URLLoader();
urlldr.dataFormat = URLLoaderDataFormat.BINARY;
urlldr.addEventListener(Event.COMPLETE, onLoadHandler);
urlldr.load(req);
var data:ByteArray;
 
function onLoadHandler(evt:Event):void{
  data = evt.target.data;
  var ldr:Loader = new Loader();
  ldr.loadBytes(data);
}


Jarproger 11.07.2010 12:53

kackbip, а как теперь добавлять этот массив байт к отображению?

Wolsh 11.07.2010 14:25

Не массив байт, а лоадеры. Просто создаете нужное количество лоадеров (в примере ldr) и загружаете в них ByteArray (urlldr.data)
Ну и добавляете их addChild'ом

Добавлено через 2 минуты
(такое ощущение что народ соревнуется, как бы сделать все потяжелее да помассивней))))

Wolsh 11.07.2010 15:28

Вложений: 1
Вот пример с шейпами. Шейпы можно заменить на Спрайты, если нужна интерактивность или добавление элементов "к картинке".

kackbip 13.07.2010 06:05

Walsh, вариант хороший и проканает почти всегда.
Мой вариант имеет смысл использовать только при желании отобразить анимированные swf.


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

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