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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Закрытая тема
Старый 13.10.2008, 03:46
dashaaa вне форума Посмотреть профиль Отправить личное сообщение для dashaaa Найти все сообщения от dashaaa
  № 1  
dashaaa

Регистрация: Sep 2008
Адрес: Moscow
Сообщений: 44
Отправить сообщение для dashaaa с помощью ICQ
По умолчанию loadMovie("1.jpg") - как узнать размер картинки?

Создаю пустой MovieClip, загружаю туда картинку:
Код:
public function loadImg():Void {
this.createEmptyMovieClip("empty_mc",1);
this["empty_mc"].loadMovie(this._name+".jpg");
trace(this["empty_mc"]._width);
}
Trace() отвечает "0"
Вопрос - как узнать размер картинки? (нужно чтобы расположить её по центру родительского мувиклипа - может есть способ проще?)
Вопрос 2 - если файла this._name+".jpg" не существует в Output вылетает сообщение об этом - можно ли как-то это сообщение поймать-отследить?

Старый 13.10.2008, 05:03
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 2  
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
Я так понимаю это кусочек класса...
Вы пытаетесь узнать размеры клипа когда он еще не успел загрузится, поэтому и 0 выводится в трейсе.
Иными словами если Вы пишете trace(...) сразу после loadMovie() это не значит что трейс выполнится после отработки этой функции... так уж устроен as (асинхронное выполнение кода).
Т.е Вам нужно сначала убедится что картинка загрузилась, а потом проводить с ней какие-либо манипуляции. Сделать это можно используя класс MovieClipLoader, у него есть событие onLoadInit, которое срабатывает после загрузки контента, собственно в функции обработчике этого события и нужно узнавать ширину мувика.

Вот пример использования этого класса
Код:
// создаем экземпляр MovieClipLoader
var mclLoader:MovieClipLoader = new MovieClipLoader();

// слушатель загрузки картинок
var oLoadListener:Object = new Object();

// вешаем слушатель к MovieClipLoader
mclLoader.addListener(oLoadListener);

// обрабатываем ошибки возникающие при загрузке
function onLoadError(mcTarget:MovieClip, sErrorCode:String):Void
{
	if (sErrorCode == "URLNotFound")
	{
		// если файл не найден, то о чем Вы спрашивали
		trace("ERROR: File not found.");
		// или можно алерт выдать какой нибудь
	}
	else if (sErrorCode == "LoadNeverCompleted")
	{
		trace("ERROR: Load failed.");
	}
	else {
		trace("Load error: " + sErrorCode);
	}
}

// это функция выполнится когда начнется загрузка изображения
oLoadListener.onLoadStart = function(mcTarget:MovieClip):Void
{
	// тута код если чтото нужно делать при старте загрузки картинки
	// например отобразить прелоадер или еще каку нить х...ню
	trace("началась загрузка " + mcTarget);
};

// эта выполняется регулярно пока изображение не загрузится
oLoadListener.onLoadProgress = function(mcTarget:MovieClip, nBytesLoaded:Number, nBytesTotal:Number):Void
{
    // тута код для прелоадера на картинку
	trace(Math.round((nBytesLoaded / nBytesTotal) * 100 + " %" + mcTarget + "загружено");
};

// эта выполнится после полной загрузки картинки
oLoadListener.onLoadComplete = function(mcTarget:MovieClip):Void
{
	trace("закончилась загрузка " + mcTarget);
	// вот тут узнаем ширину загруженной картинки
	trace("И его ширина: " + mcTarget._width);
};

// тут код загрузки картинки или swf файла
// mcHolder - клип-контейнер в котором создается пустой мувик
// и в него уже загружается что-либо
mcHolder.createEmptyMovieClip("mcImage", mcHolder.getNextHighestDepth());
// загружаем что-либо
mclLoader.loadClip("имя_фала.ршр", mcHolder.mcImage);
По второму вопросу есть плагин к FireFox Flash Tracer который показывает все трейсы от флешки при наличии debug флеш-плеера.

Есть еще вариант - создаете свое консольное окно (сами рисуете окошко с текстовым полем) в которое пишете вместо трейсов всю необходимую инфу, назначаете на сочетание клаввиш вызов этого окна, и смотрите то что сами туда выводите.

Так же существует аддон FireBug под FireFox, замечательный отладочный инструмент, в его консоль тоже можно выводить отладочную инфу из флеша, причем с возможностями поболее флешевого трейса, но для Вас думаю самым приемлимымм будет первый вариант.
__________________
trace("Остановите Землю, я сойду!!!");


Последний раз редактировалось Mur4ik; 13.10.2008 в 05:23.
Старый 13.10.2008, 11:12
dashaaa вне форума Посмотреть профиль Отправить личное сообщение для dashaaa Найти все сообщения от dashaaa
  № 3  
dashaaa

Регистрация: Sep 2008
Адрес: Moscow
Сообщений: 44
Отправить сообщение для dashaaa с помощью ICQ
Вот это да! Спасибо большое - всё предельно понятно! Проблема исчерпана %))

Старый 23.10.2008, 13:38
dashaaa вне форума Посмотреть профиль Отправить личное сообщение для dashaaa Найти все сообщения от dashaaa
  № 4  
dashaaa

Регистрация: Sep 2008
Адрес: Moscow
Сообщений: 44
Отправить сообщение для dashaaa с помощью ICQ
Интересно, когда мы что-либо загружаем в пустой мувиклип, его размер подстраивается под размер содержимого? Похоже нет, т.к. эта фукция
Код:
oLoadListener.onLoadComplete = function(mcTarget:MovieClip):Void
{
	trace("закончилась загрузка " + mcTarget);
	// вот тут узнаем ширину загруженной картинки
	trace("И его ширина: " + mcTarget._width);
};
отвечает, что его ширина 0
А как сделать, чтобы ширина мувиклипа была такая же как ширина картинки?
Или как узнать ширину картинки?

Старый 23.10.2008, 14:53
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 5  
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
Размер пустого мувика подстраивается под размеры загруженного в него контента,
просто нужно узнавать ширину и вообще какие либо манипуляции с клипом в событии onLoadInit, ниже исправленный код (там и несколько грамматических/синтаксических ошибочек было)

Код:
// создаем экземпляр MovieClipLoader
var mclLoader:MovieClipLoader = new MovieClipLoader();

// слушатель загрузки картинок
var oLoadListener:Object = new Object();

// вешаем слушатель к MovieClipLoader
mclLoader.addListener(oLoadListener);

// обрабатываем ошибки возникающие при загрузке
function onLoadError(mcTarget:MovieClip, sErrorCode:String):Void
{
	if (sErrorCode == "URLNotFound")
	{
		// если файл не найден, то о чем Вы спрашивали
		trace("ERROR: File not found.");
		// или можно алерт выдать какой нибудь
	}
	else if (sErrorCode == "LoadNeverCompleted")
	{
		trace("ERROR: Load failed.");
	}
	else {
		trace("Load error: " + sErrorCode);
	}
}

// это функция выполнится когда начнется загрузка изображения
oLoadListener.onLoadStart = function(mcTarget:MovieClip):Void
{
	// тута код если чтото нужно делать при старте загрузки картинки
	// например отобразить прелоадер или еще каку нить х...ню
	trace("началась загрузка " + mcTarget);
};

// эта выполняется регулярно пока изображение не загрузится
oLoadListener.onLoadProgress = function(mcTarget:MovieClip, nBytesLoaded:Number, nBytesTotal:Number):Void
{
    // тута код для прелоадера на картинку
	trace(Math.round(nBytesLoaded / nBytesTotal * 100) + " %" + mcTarget + "загружено");
};

// эта выполнится после полной загрузки картинки
oLoadListener.onLoadInit = function(mcTarget:MovieClip):Void
{
	trace("закончилась загрузка " + mcTarget);
	// вот тут узнаем ширину загруженной картинки
	trace("И его ширина: " + mcTarget._width);
};

// тут код загрузки картинки или swf файла
// mcHolder - клип-контейнер в котором создается пустой мувик
// и в него уже загружается что-либо
mcHolder.createEmptyMovieClip("mcImage", mcHolder.getNextHighestDepth());
// загружаем что-либо
mclLoader.loadClip("имя_фала.ршр", mcHolder.mcImage);
Только учтите что на сцене уже должен быть клип mcHolder, т.к. мы в нем создаем пустой клип...
Если нужно грузить сразу в пустой мувик который создаете, то нужно подправить место загрузки примерное так:
Код:
this.createEmptyMovieClip("mcImage", this.getNextHighestDepth());
// загружаем что-либо
mclLoader.loadClip("имя_фала.ршр", mcImage);
__________________
trace("Остановите Землю, я сойду!!!");


Последний раз редактировалось Mur4ik; 23.10.2008 в 15:03.
Старый 07.12.2008, 03:39
  № 6  
Xero201
Guest

Сообщений: n/a
А можно ли как-нибудь отловить событие полной загрузки мувика если используется функция attachMovie()? А то в "аттачиваемом" мувике хранятся переменные для его дальнейшей настройки, но в нужный момент времени они еще не загружены. Если кто знает, помогите пожалуйста.

Старый 07.12.2008, 03:52
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 7  
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Метод attachMovie не загружает мувиклип, он берет символ из библиотеки. И до первого применения, узнать переменные внутри символа нельзя.

Можно присвоить этому символу класс, и указать данные как статические свойства класса, тогда их можно будет использовать в любой момент.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 07.12.2008, 15:47
  № 8  
Xero201
Guest

Сообщений: n/a
Ух ты! отправил сообщение в полпервого ночи, и через 10 минут уже получил ответ!!! Причем очень нужный!!! Спасибо большое!

Цитата:
И до первого применения, узнать переменные внутри символа нельзя.
Да, точно. Когда щелкаю по мувику, все его значения уже известны. А вот до этого ни в какую. Я думал что это связанно с загрузкой .

Цитата:
Можно присвоить этому символу класс, и указать данные как статические свойства класса, тогда их можно будет использовать в любой момент.
Ох, вряд ли это получится. Ведь в мувике около 25 кадров, в каждом из котрых указаны свои значения параметров. В зависимости от значения параметров, зависит сколько еще мувиков надо добавить. Т.е. код следующий:
Код AS1/AS2:
//в одном из кадров мувика ("х")
var Des = {count:7}; //указывает на то, сколько еще нужно добавить мувиков
 
//в коде добавления мувиков
CountSize = 1;  // в самом начале известно что нужно добавить как минимум один мувик
 
for (var i = 0; i<CountSize; ++i){
 
var newName:String = eval("obj")+i; //имя для добавляемого элемента
place.attachMovie(eval("obj"), newName, i+spec_depth, eval("obj")); //вставляем элемент в указанное место
 
if(CountSize == 1){ //если количество мувиков еще не известно, узнать его
place[newName].gotoAndStop("х"); //перевод мувика на заданный кадр
CountSize =i+place[newName].Des.count; // !!!!undefined!!!!
}
//другие операции
}
А как можно сымитировать применение мувика? А то пробовал вызывать при его добавлении туже функцию, что вызывается при нажатии по нему, но она срабатывает только во-втором случае. Наверное потому, что в качестве "применения" выступает именно onPress, а не функции им вызываемые.


Последний раз редактировалось Xero201; 07.12.2008 в 15:55.
Старый 12.12.2008, 20:50
  № 9  
Xero201
Guest

Сообщений: n/a
Что, ребята, неужели никто не знает как имитировать нажатие кнопки?-(

Старый 06.07.2009, 16:49
Gigo вне форума Посмотреть профиль Отправить личное сообщение для Gigo Найти все сообщения от Gigo
  № 10  
Gigo

Регистрация: Jul 2009
Сообщений: 8
А как можно загрузить несколько изображений в цикле что бы все показывались? а то у меня получаеться что только один показывает (последний)

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

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

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


 


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


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