Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Дублирование загруженных даных (http://www.flasher.ru/forum/showthread.php?t=141804)

shurco2 05.07.2010 17:19

Дублирование загруженных даных
 
Есть такой код:
Код AS3:

loadMap ("http://www.google.com","/intl/en_com/images/srpr/logo1w.png");
 
function loadMap (map:int, img:String):void {
        loader.load (new URLRequest(adr + img));
        loader.contentLoaderInfo.addEventListener (Event.COMPLETE, lComplete);
}
 
function lComplete (e:Event):void {
        view1.map.addChild (loader); // первый контейнер
        view2.map.addChild (loader); // второй контейнер
}

картинка загружается как положено, но вот только во второй контейнер, как можно загрузить эту же картинку в оба контейнера ???
спасибо

i.o. 05.07.2010 17:54

loadBytes()

shurco2 05.07.2010 18:21

а почему такая конструкция не срабатывает ?

Котяра 05.07.2010 18:33

при addChild сменяется контейнер, т.е. ребёнок убирается из предыдущего списка отображения и помещается в новый.

alexberkut 05.07.2010 19:03

Сделай копию, как это сделоно во флексе:

Код AS3:

import flash.utils.ByteArray;
 
    public static function copy(value:Object):Object
    {
        var buffer:ByteArray = new ByteArray();
        buffer.writeObject(value);
        buffer.position = 0;
        var result:Object = buffer.readObject();
        return result;
    }


BlooDHounD 05.07.2010 19:07

alexberkut, а вы пробовали? =)

shurco2 05.07.2010 19:12

alexberkut: попробовал способом выше, выводит ошибку (

alexberkut 05.07.2010 19:13

Во флексе постоянно, в чистом флеше хз.
Но сюдя по тому что это написано с исользованием апи флешплеере, то думаю будет работать.
А вы думаете не будет?

А какую ошибку выдает?

Сайлас 05.07.2010 19:14

А вот я тут наблюдаю и возник такой вопрос: если это пнг, что никто человеку не советует скопировать битмапдату?
Скопируйте битмапдату :)

shurco2 05.07.2010 19:14

Цитата:

Сообщение от alexberkut (Сообщение 920097)
Во флексе постоянно, в чистом флеше хз.
Но сюдя по тому что это написано с исользованием апи флешплеере, то думаю будет работать.
А вы думаете не будет?

А какую ошибку выдает?

TypeError: Error #1034: Ошибка типа Coercion: невозможно преобразовать Object@23973869 в flash.display.DisplayObject.

Сайлас 05.07.2010 19:15

Более того, если вам потом это изображение не надо менять а просто поставить в 2 разных места - 2 битмапа с 1 битмапдатой - самое то.

alexberkut 05.07.2010 19:16

Это рантайм ошибка или при компиляции?

Если при компиляции то напиши так:

Код AS3:

function lComplete (e:Event):void {
        view1.map.addChild (loader); // первый контейнер
        view2.map.addChild (copy(loader) as DisplayObject); // второй контейнер
}


BlooDHounD 05.07.2010 19:32

alexberkut, вы попробуйте. это не может работать нигде =) ни во флэше ни во флексе. к флексу этот код вообще никакого отношения не имеет.

alexberkut 05.07.2010 19:40

т.е. ты хочешь сказать что copy метод такой работать не будет?

Flex

Конечно с Loader он может работать не будет. Я не посмотрел... лучше действительно брать использовать loadBytes и перекидывать картинку из одной компонента в другой.

BlooDHounD 05.07.2010 20:51

alexberkut, попробуйте. потом советуйте.

gloomyBrain 05.07.2010 21:16

Цитата:

Конечно с Loader он может работать не будет. Я не посмотрел... лучше действительно брать использовать loadBytes и перекидывать картинку из одной компонента в другой.
В ByteArray объекты записываются в AMF-протоколированном виде. AMF не поддерживает DisplayObject и любых его наследников.
И, да, проще получить ссылку на BitmapData картинки, ибо реиспользование и совместное использование становятся поудобнее

Хомяк 06.07.2010 02:19

Код AS3:

function LoadListener(e:Event):void{
 
      var ibitmapData:BitmapData=Bitmap(e.target.content).bitmapData;
      var bitmap:Bitmap=new Bitmap(ibitmapData);
      var bitmap2:Bitmap=new Bitmap(ibitmapData);
 
      addChild(bitmap);
      addChild(bitmap2);
 
 
}

Есть и другие варианты, но примерно надо делать тоже самое, что здесь. В переменной content содержится объект Bitmap (если речь идет о изображении конечно), сообщаем содержимое его свойства bitmapData любому новому объекту тогда этот объект уже не будет считаться ссылкой своих братьев по bitmapData и будет добавляться на сцену. Сайлас писал об этом выше, в этой же теме.

Сайлас 06.07.2010 03:17

Зачем вы создали 1 лишний битмап?

Хомяк 06.07.2010 14:05

почему же он лишний?

Сайлас 06.07.2010 14:11

Код AS3:

function LoadListener(e:Event):void{
 
      var bitmap:Bitmap=e.target.content as Bitmap;
      var bitmap2:Bitmap=new Bitmap(bitmap.bitmapData);
 
      addChild(bitmap);
      addChild(bitmap2);
 
 
}


Хомяк 07.07.2010 02:13

Сайлас. Это "тот же шарик - вид сбоку". Но упростить все таки можно. Мы с вами имеем Bitmap-объект и создаем еще два чтобы добавить на сцену. Это много. Рациональнее было бы так:
Код AS3:

function LoadListener(e:Event):void{
        var ibitmapData:BitmapData=Bitmap(e.target.content).bitmapData;
        var bitmap:Bitmap=new Bitmap(ibitmapData);
 
        addChild(e.target.content);
        addChild(bitmap);
 
 
}


i.o. 07.07.2010 02:24

на то пошло, так по затратам проца и памяти лучше вообще так:
Код AS3:

function LoadListener(e:Event):void{
 
        addChild( e.target.content );
        addChild( new Bitmap( (e.target.content as Bitmap).bitmapData ) );
 
 
}

Незачем в функции лишние переменные плодить ))

Цитата:

и создаем еще два чтобы добавить на сцену
Создается в том примере один. Другой используется как ссылка.

Хомяк 07.07.2010 04:20

Особой разницы не вижу. Ваша запись более лаконична, моя - более наглядна. Насчет затрат проца и памяти это уже переборчик.
А в примере приведенном на 2 странице создаются не ссылки а вполне самостоятельные экземпляры на основе одной и той же битмапДаты.

BlooDHounD 07.07.2010 04:54

Хомяк, ну лишних 4 байта тоже память =)

alexberkut 07.07.2010 11:20

Оффтоп, но в тему.

Помню времена когда мы на ассемблере за код боролись:
1: а у меня файл весит 20 байт
2: а у мну 18
3: а у меня 17!
1 и 2: 17??!!! КАААК?

Хомяк 08.07.2010 02:01

Слава богу! Прошли те времена :0)

shurco2 08.07.2010 12:25

спасибо за решение!
помогли очень!


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

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