Просмотр полной версии : [as2]Определение ширины и номера загружаемых картинок в 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();
как вариант: дать листенеру идентификатор..
....
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);
};
...
о, silin, огромное спасибо!
Спасибо вам, что соблюдаете правила форума
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
......
подскажите еще раз, если не сложно :)
имхо, не в обратном или каком другом, а в порядке загрузки картинок с сервера..,
массив можно объявить заранее, а в onLoadInit его только заполнять myArr[this.id]=чего-там-надо;
да, спасибо, про порядок загрузки не подумала
Сдаюсь и прошу человеческой помощи. Ничего не получается, плохо понимаю массивы...
Не удается получить номер предшествующего клипа массива, переданного 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 ....
//почему?
столкните с мертвой точки...
(координаты предшествующего клипа) + (ширина предшествующего клипа);
ты не можешь однозначно их знать, пока не загрузятся все,
вариант: дождаться загрузки всех, а уж потом все расставлять по местам..
например
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]);
}
ох-ох-ох!!!
спасибо тебе огромное! получилось
запустила внутри onLoadAll функцию расстановки по местам и все срослось...
а можно дополнительный маленький вопросик?
а что такое !-- ?
! - вроде отрицание, -- декрементирование, а вместе, да еще впереди?
как-то неуютно без понимания, почему оно работает...
если неуютно поставь скобки !(--toLoad), однако ж и так работает (0 преобразуется в false, -- впереди значит до использования)
ааа, ясно
низкий поклон за объяснение
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.