Помогите с кодом (цикл + loader)

То что касается флеша, но не касается ВКонтакте API. Например проблемы при создании прыгающего мячика.
Ответить
mastaxys
Сообщения: 32
Зарегистрирован: 12 янв 2013, 14:41

Помогите с кодом (цикл + loader)

Сообщение mastaxys »

Доброго дня, есть такой код:

Код: Выделить всё

        function isAddFriends()        {            var loader:Loader = new Loader();            var loader2:Loader = new Loader();            var loader3:Loader = new Loader();            var loader4:Loader = new Loader();            var loader5:Loader = new Loader();                        addChild(isAddFriends_panel);                loader.load(new URLRequest(isAppfriends[0].photo_medium));            loader2.load(new URLRequest(isAppfriends[1].photo_medium));            loader3.load(new URLRequest(isAppfriends[2].photo_medium));            loader4.load(new URLRequest(isAppfriends[3].photo_medium));            loader5.load(new URLRequest(isAppfriends[4].photo_medium));                        //если друзей меньше 5, то нужно делать отображение через цикл            //пока не удалось :  .item['i'] или .['item' + i] не работает            isAddFriends_panel.container.item0.image.addChild(loader);             isAddFriends_panel.container.item0.placeTF.text = "1";            isAddFriends_panel.container.item0.pointsTF.text = "0 $"            isAddFriends_panel.container.item0.nameTF.text = isAppfriends[0].first_name + " " + isAppfriends[0].last_name;            isAddFriends_panel.container.item1.image.addChild(loader2);             isAddFriends_panel.container.item1.placeTF.text = "2";            isAddFriends_panel.container.item1.pointsTF.text = "0 $"            isAddFriends_panel.container.item1.nameTF.text = isAppfriends[1].first_name + " " + isAppfriends[1].last_name;            isAddFriends_panel.container.item2.image.addChild(loader3);             isAddFriends_panel.container.item2.placeTF.text = "3";            isAddFriends_panel.container.item2.pointsTF.text = "0 $"            isAddFriends_panel.container.item2.nameTF.text = isAppfriends[2].first_name + " " + isAppfriends[2].last_name;            isAddFriends_panel.container.item3.image.addChild(loader4);             isAddFriends_panel.container.item3.placeTF.text = "4";            isAddFriends_panel.container.item3.pointsTF.text = "0 $"            isAddFriends_panel.container.item3.nameTF.text = isAppfriends[3].first_name + " " + isAppfriends[3].last_name;            isAddFriends_panel.container.item4.image.addChild(loader5);             isAddFriends_panel.container.item4.placeTF.text = "5";            isAddFriends_panel.container.item4.pointsTF.text = "0 $"            isAddFriends_panel.container.item4.nameTF.text = isAppfriends[4].first_name + " " + isAppfriends[4].last_name;          }
количество друзей это isAppfriends.length.

На панели пять ячеек, как правильно организовать цикл согласно количеству друзей? Чтобы если количество друзей меньше пяти, лишние loader'ы не грузились.

Не знаю понятно объяснил или нет, спрашивайте - отвечу...
Alazaur
Разработчик
Разработчик
Сообщения: 1001
Зарегистрирован: 16 окт 2011, 20:25

Re: Помогите с кодом (цикл + loader)

Сообщение Alazaur »

Код: Выделить всё

function isAddFriends(){    var length:int = (isAppfriends.length <= 5)?isAppfriends.length:5;    for (var i:int = 0; i < length; i++)    {        var loader:Loader = new Loader();        loader.load(new URLRequest(isAppfriends[i].photo_medium));        isAddFriends_panel.container.getChildByName("item" + i).image.addChild(loader);        isAddFriends_panel.container.getChildByName("item" + i).placeTF.text = (i + 1).toString();        isAddFriends_panel.container.getChildByName("item" + i).pointsTF.text = "0 $"        isAddFriends_panel.container.getChildByName("item" + i).nameTF.text = isAppfriends[i].first_name + " " + isAppfriends[i].last_name;    }}
Alazaur
Разработчик
Разработчик
Сообщения: 1001
Зарегистрирован: 16 окт 2011, 20:25

Re: Помогите с кодом (цикл + loader)

Сообщение Alazaur »

Забыл сказать, вместо

Код: Выделить всё

isAddFriends_panel.container.getChildByName("item" + i).image.addChild(loader);
в вашем случае можно писать и так:

Код: Выделить всё

isAddFriends_panel.container["item" + i].image.addChild(loader);
mastaxys
Сообщения: 32
Зарегистрирован: 12 янв 2013, 14:41

Re: Помогите с кодом (цикл + loader)

Сообщение mastaxys »

Спасибо... Оказывается я так уже делал на AS2 только подзабыл ))

Ещё вопрос: А можно ли по такому принципу задавать имена функций?

Например добавляю слушателя:

Код: Выделить всё

isAddFriends_panel.container.item1.addEventListener(MouseEvent.MOUSE_DOWN, item1_btnDown);
можно ли сделать что то типа этого:

Код: Выделить всё

isAddFriends_panel.container["item" + i].addEventListener(MouseEvent.MOUSE_DOWN, "item" + i + "_btnDown";
?
Alazaur
Разработчик
Разработчик
Сообщения: 1001
Зарегистрирован: 16 окт 2011, 20:25

Re: Помогите с кодом (цикл + loader)

Сообщение Alazaur »

Вы хотите интерпретатор ActionScript'a на самом ActionScript'е написать? :D Не стоит этого делать :)
Если у вас функции выполняют одни и те же действия только для разных кнопок логично будет для всех указать обработчиком события одну функцию. Например так:

Код: Выделить всё

for( ... ) {   isAddFriends_panel.container["item" + i].nameTF.text = isAppfriends[i].first_name + " " + isAppfriends[i].last_name;   isAddFriends_panel.container["item" + i].addEventListener(MouseEvent.MOUSE_DOWN, handlerItemsDown);}   private function handlerItemsDown(e:MouseEvent):void {   var item:MovieClip = e.currentTarget as MovieClip; //Предполагаю что item0 - item4 MovieClip'ы;   trace(item.nameTF.text);}
Если же логика во всех функциях разная, то делать что-то подобное не стоит, вы только затрудните восприятие кода.
mastaxys
Сообщения: 32
Зарегистрирован: 12 янв 2013, 14:41

Re: Помогите с кодом (цикл + loader)

Сообщение mastaxys »

Код: Выделить всё

    var item:MovieClip = e.currentTarget as MovieClip; //Предполагаю что item0 - item4 MovieClip'ы; 
Круто! Это то что мне надо! Дааа.. AS3 гибче AS2 )))

Огромное спасибо!
Ответить