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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 01.09.2008, 20:17
джонатан вне форума Посмотреть профиль Отправить личное сообщение для джонатан Найти все сообщения от джонатан
  № 1  
Ответить с цитированием
джонатан
 
Аватар для джонатан

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
По умолчанию Почему в MovieClipLoader не аттачится клип?

Приветствую вас, уважаемые товарищи! Помогите пожалуйста с проблемой разобраться.

Короче! Есть MovieClipLoader, а при onLoadStart я хочу аттачить клип с прелоадером, чтобы отображать процесс загрузки во время onLoadProgress.
Но вот почему-то не грузится ничего! Как же быть?? В самом клипе я прелоадер нарисовать немогу, т.к. он создается динамически.
Вот код:

Код:
var mcl:MovieClipLoader = new MovieClipLoader();
var mclL:Object = new Object();
mcl.addListener(mclL);

mclL.onLoadStart = function(target:MovieClip) {
	target.attachMovie("prel", "preloader", this.getNextHighestDepth());
}

mclL.onLoadProgress = function(target:MovieClip, loaded:Number, total:Number) {
trace(target.preloader) // Выводит "undefined" :(
}
mclL.onLoadInit = function(target:MovieClip) {
	target.realWidth = target._width;
	target.realHeight = target._height;
	target.flagLoaded = true;
	target._width = prevWidth;
	target._height = prevHeight;
	indexMC = Number(target._name);
	target._x = indexMC*(prevWidth+LV)+prevX;
	target._y = prevY;
	target._visible = false;
	orderedVisualization(target);
	if (imgCounter==loaderVars.allImages) {
		mcl.removeListener(mclL);
		delete mclL;
		delete mcl;
		Start();
	}
	imgCounter++;
}

function loadImg() {
	for (var i:Number = 0; i<=loaderVars.allImages-1; i++) {
		preview_mc.createEmptyMovieClip(i, preview_mc.getNextHighestDepth());
		preview_mc[i].flagLoaded = false;
		mcl.loadClip("photos/"+(i+1)+".jpg", preview_mc[i]);
	}


loadImg();
Благодарю за внимание!
__________________
Убейте меня!

Старый 02.09.2008, 00:09
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Вы про контейнеры когда-нибудь слышали? Грузить клип надо в пустой мувик, который находится в контейнере. В этом контейнере сохранять нужные параметры, аттачить в него маски, прелоадеры и прочее. Не трогайте клип, в который грузите! Его нет, пока загрузка не закончится.
Код:
var mcl:MovieClipLoader = new MovieClipLoader();
var mclL:Object = new Object();
mcl.addListener(mclL);

mclL.onLoadStart = function(target:MovieClip) {
    target._parent.attachMovie("prel", "preloader", this.getNextHighestDepth());
}

mclL.onLoadProgress = function(target:MovieClip, loaded:Number, total:Number) {
trace(target._parent.preloader) // Выводит "undefined"  
}
mclL.onLoadInit = function(target:MovieClip) {
    target.realWidth = target._width;
    target.realHeight = target._height;
    target.flagLoaded = true;
    target._width = prevWidth;
    target._height = prevHeight;
    indexMC = Number(target._name);
    target._x = indexMC*(prevWidth+LV)+prevX;
    target._y = prevY;
    target._visible = false;
    orderedVisualization(target);
    if (imgCounter==loaderVars.allImages) {
        mcl.removeListener(mclL);
        delete mclL;
        delete mcl;
        Start();
    }
    imgCounter++;
}

function loadImg() {
    for (var i:Number = 0; i<=loaderVars.allImages-1; i++) {
        preview_mc.createEmptyMovieClip(i, preview_mc.getNextHighestDepth());
        preview_mc[i].flagLoaded = false;
        mcl.loadClip("photos/"+(i+1)+".jpg", preview_mc[i]);
    }


loadImg();
pS А вообще зря я чтото в Вашем коде стал писать, там надо все переписывать на контейнеры. Может со временем поймете, в чем удобство, сейчас Вам конечно кажется что это лишние клипы и проч.
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 02.09.2008 в 00:19.
Старый 02.09.2008, 12:36
джонатан вне форума Посмотреть профиль Отправить личное сообщение для джонатан Найти все сообщения от джонатан
  № 3  
Ответить с цитированием
джонатан
 
Аватар для джонатан

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
Я так уже пробовал, у меня сразу флеш вылетает какого-то хрена... Я подумал что что-то там неладное просто происходит.

// update

И на других компах вылетает... А вот когда я сделал так:

Код:
mclL.onLoadStart = function(target:MovieClip) {
	target._parent.createEmptyMovieClip("mc", 100);
	target._parent.mc.attachMovie("prel", "preloader", this.getNextHighestDepth());
}
то все стало нормально. Как думаете, что же это может быть то такое?
__________________
Убейте меня!


Последний раз редактировалось джонатан; 02.09.2008 в 13:45.
Старый 02.09.2008, 23:46
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 4  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
В первом посте: ты пытаешься засунуть мувик prev в контейнер, в который грузится изображение, что бесполезно.
В коде из второго поста в обработчике onLoadStart, this указывает на mclL, т.е. this.getNextHighestDepth() возвращает undefined, а в метод attachMovie(), в качестве параметра глубины, передается NaN вместо положенного integer, и он поэтому аттачит мувик "prel" loaderVars.allImage раз на нулевую глубину, вымещая при этом первый контейнер с изображением. Остальлные картинки должны грузиться нормально.
В варианте номер три, ты создаешь мувик mc, для аттача в него prev, на 100 глубине, поэтому не стираешь первый контейнер с изображением, следовательно, все картинки нормально загружаются. prev при этом трижды аттачится в mc, на 0 глубину непонятно зачем.


Последний раз редактировалось udaaff; 02.09.2008 в 23:48.
Старый 03.09.2008, 01:21
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
udaaff : А почему трижды?
джонатан : не надо пихать this.getNextHighestDepth() везде. Если у Вас пустой, только что созданный, мувик, нет никакого смысла искать в нем "следующую свободную глубину" - они все свободны. К тому же, если еще плохо представляете себе области видимости функций, описанные udaaff ошибки почти неизбежны)) Конечно не надо создавать еще один контейнер в контейнере, теперь для прелоадера. Есть один контейнер, в нем - клип в который грузится картинка и в нем же - аттачится прелоадер. Считайте, что Вы вставляете картину в рамку. У рамки может быть стекло (маска), паспарту, этикетка и т.п. Эта картина в рамке - один объект, который Вы можете дальше использовать - повесить на стену, поставить на стол...
Что касается кода - как я уже сказал, начал было исправлять, но понял что силов не хватит. Поэтому придерусь к кускам -
Код:
mclL.onLoadStart = function(target:MovieClip) {
    target._parent.attachMovie("prel", "preloader", target.getDepth()+2);
}
Вот это выделенное не имеет смысла - флаг НЕ СОХРАНИТСЯ!
Код:
function loadImg() {
    for (var i:Number = 0; i<=loaderVars.allImages-1; i++) {
        preview_mc.createEmptyMovieClip(i, preview_mc.getNextHighestDepth());
        preview_mc[i].flagLoaded = false;
        mcl.loadClip("photos/"+(i+1)+".jpg", preview_mc[i]);
    }
} // - разве здесь не должна быть скобка? у Вас нет.
loadImg();
И да, там где я вставлял _parent - предполагалось что будет создан контейнер.
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 03.09.2008 в 01:26.
Старый 03.09.2008, 01:55
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 6  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
Сообщение от Wolsh Посмотреть сообщение
udaaff : А почему трижды?
Не знаю почему трижды В уме серию из трех картинок проигрывал )) Наверное, поэтому.
Трижды, в смысле, loaderVars.allImages раз

Старый 03.09.2008, 12:18
джонатан вне форума Посмотреть профиль Отправить личное сообщение для джонатан Найти все сообщения от джонатан
  № 7  
Ответить с цитированием
джонатан
 
Аватар для джонатан

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
Код:
} // - разве здесь не должна быть скобка? у Вас нет.
loadImg();
Ндааа... Куда-то она запропастилась... Даже и не знаю куда! Но на самом деле не важно, это я просто тут опечатался...

Ну что ж. Спасибо вам. Вродебы понял в чем беда. Но я уже сделал иначе, а переделать - нет времени, по крайней мере пока. еще много чего предстоит сделать.

Вот так вот у меня получилось:

Код:
mclL.onLoadStart = function(target:MovieClip) {
	target._parent.createEmptyMovieClip("mc", 100);
	target._parent.mc.attachMovie("prel", "preloader", this.getNextHighestDepth());
	target._parent.mc._y = (prevHeight / 2) - (target._parent.mc._height / 2) ;
	if(prelN > 0) {
		target._parent.createEmptyMovieClip("mc", 100);
		target._parent.mc._x = (prevWidth * prelN) + (LV * prelN);
		target._parent.mc.attachMovie("prel", "preloader", this.getNextHighestDepth());
		target._parent.mc._y = (prevHeight / 2) - (target._parent.mc._height / 2) ;
	}
}
mclL.onLoadProgress = function(target:MovieClip, loaded:Number, total:Number) {
	loading = Math.round(loaded / total * 100);
	target._parent.mc.preloader.gotoAndStop(loading);
	target._parent.mc.preloader.progress_txt.text = loading + "%";
}
mclL.onLoadComplete = function(target:MovieClip) {
	prelN ++;
}
mclL.onLoadInit = function(target:MovieClip) {
	target._parent.mc.removeMovieClip();
	target.realWidth = target._width;
	target.realHeight = target._height;
	target.flagLoaded = true;
	target._width = prevWidth;
	target._height = prevHeight;
	indexMC = Number(target._name);
	target._x = indexMC*(prevWidth+LV)+prevX;
	target._y = prevY;
	target._visible = false;
	orderedVisualization(target);
	if(fotoNum == 0) {
		renderBMP(preview_mc[fotoNum]);
		fotoNum++;
		photo_txt.text = fotoNum + "/" + loaderVars.allImages;
	}
	if (iZ <= loaderVars.allImages-1) {
		loadImg();
	} else if (imgCounter==loaderVars.allImages) {
		mcl.removeListener(mclL);
		delete mclL;
		delete mcl;
	}
	imgCounter++;
}
Еще раз спасибо!
__________________
Убейте меня!

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
И зачем два раза повторять? Вы ведь не сообщение повторяете, Вы клипы аттачите.
Цитата:
Код:
mclL.onLoadStart = function(target:MovieClip) {
	target._parent.createEmptyMovieClip("mc", 100);
	target._parent.mc.attachMovie("prel", "preloader", this.getNextHighestDepth());
	target._parent.mc._y = (prevHeight / 2) - (target._parent.mc._height / 2) ;
	if(prelN > 0) {
		target._parent.createEmptyMovieClip("mc", 100);
		target._parent.mc._x = (prevWidth * prelN) + (LV * prelN);
		target._parent.mc.attachMovie("prel", "preloader", this.getNextHighestDepth());
		target._parent.mc._y = (prevHeight / 2) - (target._parent.mc._height / 2) ;
	}
}
Строчки, выделенные желтым просто не нужны. Нет, не "просто" не нужны, а ДОЛЖНЫ быть удалены из кода.
И вот опять this.getNextHighestDepth() ! Вам ведь объяснили, что this здесь - экземпляр листенера, у него вообще никакой глубины нет. mc - только что созданный ПУСТОЙ мувик, аттачте на глубину 1 и не мучайте плеер дайвингами на мели.
__________________
Reality.getBounds(this);

Старый 03.09.2008, 17:26
qazwsx вне форума Посмотреть профиль Найти все сообщения от qazwsx
  № 9  
Ответить с цитированием
qazwsx
Banned
[+5 15.02.09]
[++5 15.02.09]

Регистрация: Mar 2008
Адрес: Krasnoyarsk
Сообщений: 587
Все было бы проще если бы вы ему не советовали принимая его ошибки как должное. А показали бы действительно правильный и вазможно даже красивый код... Зачем создавать вообще этот листенер? >_>

Старый 03.09.2008, 17:44
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 10  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Так человек ничему не научится. Просто не захочет ничему учиться - приходи да бери. Пусть разбирается. Рабочий (не говорю "красивый")) пример я давал тут: http://flasher.ru/forum/showpost.php...9&postcount=10
__________________
Reality.getBounds(this);

Создать новую тему Ответ Часовой пояс GMT +4, время: 21:52.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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