Просмотр полной версии : addChild через getChildByName
misha_yu
16.06.2008, 10:51
Всем привет,
Для моей задачи (он лайн слаид шоу с анимацией переходов) надо манипулировать загруженными изображениями.
Возможно ли после того как все изображения погрузятся в лодер и добавлять содержимое лодеров в чилды контейнеров обращаясь к ним по именам?
Обратиться к ним через getChildByName – не получается
Так не работает:
getChildByName("container1").addChild(getChildByName("myLoader1"));
пока я просто помещаю контейнеры с содержимым и ставлю alpha-0, потом манипулирую с прозрачностью обращаясь к чилду контейнера по имени. Но так наверное будет память нерационально использоваться?
Посоветуйте как грамотнее решить вопрос.
Спасибо.
Создай массив и помещай туда прелоадеры. Назначай им загрузку. Проходись по массиву через определенное время - бери следующее загруженное изображение. Обнуляй номер, подходя к концу массива. getChildByName - используй только для объектов которые были созданы не программно.
misha_yu
16.06.2008, 15:00
спасибо за ответ.
Создай массив и помещай туда прелоадеры.
Так?
var Names:Array=new Array ("loader1","loader2","loader3");
for (var i:Number=0; i<3; i++)
{
//var Names[i]:Loader =new Loader; - ТАК НЕ РАБОТАЕТ!
var myLoader:Loader =new Loader;// так работает
myLoader.name=Names[i];
trace (myLoader.name)
}
Так ведь нельзя будет к ним обращаться по имени чилда чтобы по желанию добавлять загруженные лодеры в контейнер и потом на стэйдж?
А если загруженые сразу помещать и ставить alpha=0, сильно память съесться по сравнению с добавлением в контейнер?
спасиба.
Alex Lexcuk
16.06.2008, 18:39
Хм три картинки...
Загрузка рисунков с xml в спрайты
http://dnadillo.dn.ua/fla/XML/img-xml-img.swf
http://dnadillo.dn.ua/fla/XML/img-xml-img.zip
http://dnadillo.dn.ua/fla/XML/img_xml.xml
Суть: делается спрайт-контейнер.
Создается массив спрайтов sprite_array[], они помещаются на спрайт контейнер, обращатся к ним можно по цифре массива sprite_array[image_list].
Потом проматывать можно так:
topPosition = my_gallery_container.numChildren - 1;
my_gallery_container.setChildIndex(sprite_array[image_list], topPosition);
misha_yu
17.06.2008, 10:23
Огромнейшее спасибо!
чесно говоря не знал, что мувики и спрайты можно помещать в массив и обращаться к ним (только пару месяцев флэширую).
Это решает проблему!!!
Еще вопрос, с вашего позволения, для расширения кругозора.
почему нельзя обратиться к чилду через getChildByName котороый находится в другом классе?
filmClass.getChildByName("pic0").alpha=0;
где filmClass - класс документа, обращение идет из класса чилды которого добавляются в документ.
Пишет ошибку:1061: Call to a possibly undefined method getChildByName through a reference with static type Class.
вроде все библиотеки которые надо импортировал.
Felicast
17.06.2008, 13:04
скорее всего надо так:
(root as filmClass).getChildByName("pic0").alpha=0;
как я понял filmClass - это класс, а не объект.
misha_yu
17.06.2008, 13:25
вот на такой код (где loadFunctionCount - переменная в классе документа )
if (filmClass.loadFunctionCount>1) {
trace (" УСЛОВИЕ ПРОШЛО --filmClass.loadFunctionCount>1--")
(root as filmClass).getChildByName("pic0").alpha=0;
}
пишет такое в окошке Output:
УСЛОВИЕ ПРОШЛО --filmClass.loadFunctionCount>1--
TypeError: Error #1006: value is not a function.
at MethodInfo-9()
PS как я писал я решил проблему через массив, так, что вопрос с getChildByName - носит праздный характер.
Alex Lexcuk
18.06.2008, 00:24
Вспомнил одну фишку, это слайд шоу...
http://www.flashandmath.com/basic/transitions/example3.html
Делай все по порядку, к примеру:
1) Создай массив и в цикле запихай в него объекты которые грузят 4 картинки в главном классе:
var pictures:Array = [];
for (var i =0; i<=3;i++){
pictures[i] = new CustomImage("image" + i + ".jpg");
}
2) Создай новый класс, описывающий поведение CustomImage (CustomImage.as)
package {
import flash.display.*;
import flash.net.URLRequest;
import flash.events.*;
public class CustomImage extends Sprite {
private var loader:Loader;
public var isLoaded:Boolean;
public function CustomImage(url:String):void{
isLoaded = false;
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaded);
loader.load(new URLRequest(url));
}
private function onLoaded(e:Event):void{
isLoaded = true;
addChild(Bitmap(loader.content));
}
}//end class
}//end package
3) Циклом проверяешь все твои кастомИзображения на загрузку (pictures[i].isLoaded == true), если да то добавляешь на сцену addChild(pictures[i]) и работаешь с его свойствами по типу pictures[i].alpha = 0.3 также циклом или по номеру.
з.ы Писал от балды может и где ошибка закралась
misha_yu
19.06.2008, 12:34
большое спасибо за такой развернутый ответ!
В общем....я так и сделал, только менее рационально (пока разбирался что как работает).
пожалуй оптимизирую попозже как допишу плэйер.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.