Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 08.01.2006, 18:26
jut' вне форума Посмотреть профиль Отправить личное сообщение для jut' Найти все сообщения от jut'
  № 1  
Ответить с цитированием
jut'

Регистрация: Apr 2004
Сообщений: 27
Thumbs up [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();


Последний раз редактировалось jut'; 11.01.2006 в 15:27.
Старый 08.01.2006, 18:36
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
как вариант: дать листенеру идентификатор..
Код:
....
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);
		};
...

Старый 08.01.2006, 18:42
jut' вне форума Посмотреть профиль Отправить личное сообщение для jut' Найти все сообщения от jut'
  № 3  
Ответить с цитированием
jut'

Регистрация: Apr 2004
Сообщений: 27
о, silin, огромное спасибо!

Старый 08.01.2006, 18:47
Antares вне форума Посмотреть профиль Найти все сообщения от Antares
  № 4  
Ответить с цитированием
Antares
Banned
[+1 16.05.2006]
[++1 16.05.2006]
[+ 1 21.05.06]
[++ за хамство]
[+1 21.05.2006]
 
Аватар для Antares

Регистрация: Dec 2003
Сообщений: 3,925
Спасибо вам, что соблюдаете правила форума

Старый 08.01.2006, 22:13
jut' вне форума Посмотреть профиль Отправить личное сообщение для jut' Найти все сообщения от jut'
  № 5  
Ответить с цитированием
jut'

Регистрация: Apr 2004
Сообщений: 27
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
......
подскажите еще раз, если не сложно


Последний раз редактировалось jut'; 08.01.2006 в 22:17.
Старый 08.01.2006, 22:28
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
имхо, не в обратном или каком другом, а в порядке загрузки картинок с сервера..,
массив можно объявить заранее, а в onLoadInit его только заполнять myArr[this.id]=чего-там-надо;

Старый 08.01.2006, 22:31
jut' вне форума Посмотреть профиль Отправить личное сообщение для jut' Найти все сообщения от jut'
  № 7  
Ответить с цитированием
jut'

Регистрация: Apr 2004
Сообщений: 27
да, спасибо, про порядок загрузки не подумала

Старый 09.01.2006, 18:16
jut' вне форума Посмотреть профиль Отправить личное сообщение для jut' Найти все сообщения от jut'
  № 8  
Ответить с цитированием
jut'

Регистрация: Apr 2004
Сообщений: 27
Сдаюсь и прошу человеческой помощи. Ничего не получается, плохо понимаю массивы...
Не удается получить номер предшествующего клипа массива, переданного 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  ....
//почему? 
столкните с мертвой точки...


Последний раз редактировалось jut'; 09.01.2006 в 18:26.
Старый 09.01.2006, 18:37
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 9  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
(координаты предшествующего клипа) + (ширина предшествующего клипа);
ты не можешь однозначно их знать, пока не загрузятся все,
вариант: дождаться загрузки всех, а уж потом все расставлять по местам..
например
Код:
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]);
}

Старый 09.01.2006, 19:12
jut' вне форума Посмотреть профиль Отправить личное сообщение для jut' Найти все сообщения от jut'
  № 10  
Ответить с цитированием
jut'

Регистрация: Apr 2004
Сообщений: 27
ох-ох-ох!!!

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


Последний раз редактировалось jut'; 09.01.2006 в 19:17.
Создать новую тему Ответ Часовой пояс GMT +4, время: 16:21.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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