Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   [as2]Определение ширины и номера загружаемых картинок в onLoadInit (http://www.flasher.ru/forum/showthread.php?t=73977)

jut' 08.01.2006 18:26

[as1]Определение ширины и номера загружаемых картинок в onLoadInit
 
Добрый день!

Делаю функцию для загрузки картинок.
Ширину загружаемых картинок определяю внутри
onLoadInit,
но там не получается вывести весь ряд итераций (? не уверена в термине - последовательность всех чисел, перебираемых циклом).
Получается, что у меня ширина каждой картинки известна только внутри onLoadInit, а номер ее клипа - только снаружи.
Наверняка есть решение, и для профессионала оно простое...
Заранее благодарна за подсказку.

Код:

var n:Number = 9;

function loadSmallImages():Void {
        for (i=1; i<n+1; i++) {
        _root.createEmptyMovieClip("smClip"+i, i);
        var clipsOfSmalls = _root["smClip"+i];
       
        //выводит последовательно i (1,2,3,4,5,6,7,8,9)
        //trace(i);
       
var loaderSmalls:MovieClipLoader = new MovieClipLoader();
var listenerSmalls:Object = {};
loaderSmalls.addListener(listenerSmalls);
loaderSmalls.loadClip("img/object3/photo/sm/00"+i+".jpg", i);

listenerSmalls.onLoadInit = function(clipsOfSmalls :MovieClip) {
       
        //выводит правильную ширину картинок
        //trace(clipsOfSmalls._width);       
       
        //выводит n раз n+1 (в данном случае 9 раз по 10) 
        trace(i);
               
}


listenerSmalls.onLoadComplete = function():Void {
                delete loaderSmalls, delete listenerSmalls;
               
};
        //выводит последовательно i (1,2,3,4,5,6,7,8,9)
        //trace(i);
            //а надо, чтобы он это же вывел внутри onLoadInit
};
};

loadSmallImages();


silin 08.01.2006 18:36

как вариант: дать листенеру идентификатор..
Код:

....
var listenerSmalls:Object = {id:i};
                loaderSmalls.addListener(listenerSmalls);
                loaderSmalls.loadClip("img/object3/photo/sm/00"+i+".jpg", i);
                listenerSmalls.onLoadInit = function(clipsFromMassivOfSmalls:MovieClip) {
                        trace(this.id);
                };
...


jut' 08.01.2006 18:42

о, silin, огромное спасибо!

Antares 08.01.2006 18:47

Спасибо вам, что соблюдаете правила форума

jut' 08.01.2006 22:13

Antares, спасибо, теперь буду стараться оправдать...
Какое-то время думала, новый это вопрос или тот же, но считаю, что скорее почти тот же, не стоит дважды код повторять


проблема в том, что
переменная цикла, становясь свойством объекта, выводится в обратном порядке,
обратить ее у меня не получается
попытки использовать массив и сделать ему reverse() результата не дали, т.к. массив, который создается в цикле, непростой (о его особенностях наверное лучше второй вопрос задавать?)
.

честно билась, придумать решение пока не могу

Код:

for (var i=1; i<n+1; i++) {

//здесь trace выводит правильную последовательность 1,2,3,4...

.......
var listenerSmalls:Object = {id:i};
......
listenerSmalls.onLoadInit = function(clipsFromMassivOfSmalls:MovieClip) {
 trace(this.id);
//выводит обратную последовательность ...4,3,2,1
......

подскажите еще раз, если не сложно :)

silin 08.01.2006 22:28

имхо, не в обратном или каком другом, а в порядке загрузки картинок с сервера..,
массив можно объявить заранее, а в onLoadInit его только заполнять myArr[this.id]=чего-там-надо;

jut' 08.01.2006 22:31

да, спасибо, про порядок загрузки не подумала

jut' 09.01.2006 18:16

Сдаюсь и прошу человеческой помощи. Ничего не получается, плохо понимаю массивы...
Не удается получить номер предшествующего клипа массива, переданного onLoadInit в виде переменной (если я правильно понимаю проблему)

Код:

var arrOfWidths:Array = [];
var arrOfClips:Array = [];

//начало функции загрузки
function loadSmallImages():Void {
        for (var i=1; i<n+1; i++) {
        _root.createEmptyMovieClip("smClip"+i+"_mc", i);
//arrOfClips присваивается ряд созданных клипов
        arrOfClips[i] = _root["smClip"+i+"_mc"];
...
var listenerSmalls:Object = {id:i};
...
//arrOfClips задано как аргумент ф-ции инициализации загрузки
listenerSmalls.onLoadInit = function(arrOfClips:MovieClip) {
        arrOfWidths[this.id] = arrOfClips._width;

//как их получить?
        arrOfClips._x = (координаты предшествующего клипа) + (ширина предшествующего клипа);

}

собственно надо сделать аналог вот такого распространенного решения, но внутри OnLoadInit
Код:

for (var i=0; i<n; i++) {
        _root.attachMovie("obj"+i, "obj"+i+"_mc", i);
        _root["obj"+i+"_mc"]._x = _root["obj"+(i-1)+"_mc"]._x + _root["obj"+(i-1)+"_mc"]._width + 10;
        _root["obj"+i+"_mc"]._y = 10;
}

попытки сделать так ни чему не приводят:
Код:

rrOfClips._x = arrOfXes[this.id-1] + arrOfWidths[this.id-1];
trace (arrOfWidths[this.id-1]);
//выдает indefined  indefined  indefined  ....
//почему?

столкните с мертвой точки...

silin 09.01.2006 18:37

(координаты предшествующего клипа) + (ширина предшествующего клипа);
ты не можешь однозначно их знать, пока не загрузятся все,
вариант: дождаться загрузки всех, а уж потом все расставлять по местам..
например
Код:

var clips= [];
var nPics=3,toLoad=3;
onLoadAll=function(){
        for(var i=0;i<3;i++) trace(i+'  : width='+clips[i]._width);
}
for(var i=0;i<nPics;i++){
        clips[i]=_root.createEmptyMovieClip(i, i);
        var l= {};
        var ml:MovieClipLoader = new MovieClipLoader();
        ml.addListener(l);
        l.onLoadInit = function(){
                if(!--toLoad)onLoadAll();
        }
        ml.loadClip(i+".jpg",clips[i]);
}


jut' 09.01.2006 19:12

ох-ох-ох!!!

спасибо тебе огромное! получилось
запустила внутри onLoadAll функцию расстановки по местам и все срослось...

jut' 09.01.2006 19:17

а можно дополнительный маленький вопросик?
а что такое !-- ?
! - вроде отрицание, -- декрементирование, а вместе, да еще впереди?

как-то неуютно без понимания, почему оно работает...

silin 09.01.2006 19:20

если неуютно поставь скобки !(--toLoad), однако ж и так работает (0 преобразуется в false, -- впереди значит до использования)

jut' 09.01.2006 19:23

ааа, ясно
низкий поклон за объяснение


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

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