Показать сообщение отдельно
Старый 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.