Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   addChild у Loader (http://www.flasher.ru/forum/showthread.php?t=140047)

Follower 18.05.2010 20:30

addChild у Loader
 
Здравствуйте!
Уже долго бьюсь над такой проблемой.
Object, состоящий из семи Loader, отказывается использовать addChild, хотя файл вроде бы загружен, так как событие COMPLETE при этом срабатывает. Если в это же место поставить обычный одиночный Loader, то все работает.
Вот сам код:

Код AS3:

var ldr:Object = new Object;
for (i=0;i<7;i++){
ldr[i]=new Loader();
}
ldr[3].contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded);
function Compl():void {
for (i=0; i<7; i++) {
Url = new URLRequest("3_1_1.jpg");
ldr[i].load(Url);
addChild(ldr[i]);
}


Zebestov 18.05.2010 22:49

ничего не получилось =( грузит твой пример все 7 картинок и всё тут!

Follower 19.05.2010 10:50

Re:
 
Сейчас напишу поподробней. Вот пустой файл только с этим кодом:
Код AS3:

import flash.display.Loader;
 
var i:int;
var Url:URLRequest;
var ldr:Object = new Object;
for (i=0; i<7; i++) {
        ldr[i]=new Loader();
        ldr[i].height=240;
        ldr[i].width=180;
        ldr[i].x=180*i;
}
 
ldr[6].contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded);
 
сompl();
 
function сompl():void {
        for (i=0; i<7; i++) {
                Url = new URLRequest("file:///F:/SITE/images/galery/3_3_"+String(i+1)+".jpg");
                ldr[i].load(Url);
                addChild(ldr[i]);
        }
}
 
function imgLoaded(event:Event):void {
        trace("Complete!");
}

Из ошибок выводит только "Complete!". URL правильный. Все равно не отображает.

Жень Шень 19.05.2010 11:41

Вы пытаетесь отобразить картинки не дождавшись загрузки.
Попробуйте так:
Код AS3:

import flash.display.Loader;
 
var i:int;
var Url:URLRequest;
var ldr:Object = new Object;
for (i=0; i<3; i++) {
        ldr[i]=new Loader();
        ldr[i].height=240;
        ldr[i].width=180;
        ldr[i].x=180*i;
        ldr[i].contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded);
}
 
сompl();
 
function сompl():void {
        for (i=0; i<3; i++) {
                Url = new URLRequest(String(i+1)+".jpg");
                ldr[i].load(Url);
        }
}
function imgLoaded(e:Event):void {
        addChild(e.target.content);
        trace("Complete!");
}

Да, по окончании загрузки отпишитесь от листенеров

incvizitor 19.05.2010 12:01

Код AS3:

ldr[6].contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded);

А кто Вам вообще сказал что последняя картинка загрузится последней?

Zebestov 19.05.2010 12:06

и почему это нельзя добавлять лоадер до загрузки? я не говорю про корректность этого действия. я про ошибку — спокойно себе аттачится и уже на экране ждет загрузки.

P.S.
еще раз повторюсь — ошибку воспроизвести не удалось. вставил тупо первый код, закомментировал лиснер и подставил URL картинки наугад.

Follower 19.05.2010 13:18

Спасибо
 
Жень Шень, спасибо, в таком виде все работает:
Код AS3:

import flash.display.Loader;
 
var i,j:int;
var Url:URLRequest;
var ldr:Object = new Object;
for (i=0; i<7; i++) {
        ldr[i]=new Loader();
        ldr[i].contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded);
}
 
Compl();
j=0;
 
function Compl():void {
        for (i=0; i<7; i++) {
                Url = new URLRequest("file:///F:/SITE/images/galery/3_3_"+String(i+1)+".jpg");
                ldr[i].load(Url);
        }
}
 
function imgLoaded(e:Event):void {
        e.target.content.height=240;
        e.target.content.width=180;
        e.target.content.x=j*180;
        j++;
        addChild(e.target.content);
}

Однако очень неудобно, что размер и положение можно изменять только после загрузки, иначе говорит, что кто-то там не должен быть null.
Нельзя ли как-то передавать в imgLoaded номер обьекта?

Код AS3:

z=int(String(e.target.url).substr(34,1))-1;

Вот так AS3 плодит индусов(

Добавлено через 2 часа 55 минут
Благодаря вашим мудрым советам отображение работает, но еще один вопрос.

Как мне так обработать нажатие на это самое отобразившееся дитя, чтобы нажатое менялось контентом с нулевым?

Если просто
Код AS3:

if (z!=0) {
        l[z].contentLoaderInfo.addEventListener(MouseEvent.CLICK, chang);
}
...
function chang(e:MouseEvent):void {
        var temp:Loader=new Loader;
        var z:int;
        z=1;
        removeChild(l[0].content);
        removeChild(l[z].content);
        temp=l[0];
        l[0]=l[z];
        l[z]=temp;
        addChild(l[0].content);
        addChild(l[z].content);
}

не работает. Переданное из e:Event вообще странное.

dimarik 19.05.2010 23:59

А с каких пор у Loader работает addChild?

Zebestov 20.05.2010 00:05

это по-испански. "аддчайлд и лоадер" по-нашенски :D

Follower 20.05.2010 00:15

А по существу вопроса?


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

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