Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   изменение размеров загруженного jpeg (http://www.flasher.ru/forum/showthread.php?t=74619)

ksanster 24.01.2006 13:24

изменение размеров загруженного jpeg
 
Проблема. Есть код:
holder_mc.createEmptyMovieClip("img_mc",0);
holder_mc.img_mc.loadMovie("some.jpg");
_timer = setInterval(this,"_timefunc",50,getTimer());
this._timefunc = function() {
var loadedBytes:Number = holder_mc.img_mc.getBytesLoaded();
var totalBytes:Number = holder_mc.img_mc.getBytesTotal();
if ((totalBytes > 4)
&& (loadedBytes == totalBytes)) {
clearInterval(_timer);
//что-то делаем с загруженным
trace(holder_mc.img_mc._width);
}
}

Почему-то при (loadedBytes == totalBytes) ширина и высота загруженного
некоторое время равны нулю (мдя,суперская фраза :) ).
Такое впечатление, что loadedBytes == totalBytes не является достаточным признаком того, что картинка загрузилась, приходится вводить проверку еще и на
(holder_mc.img_mc._width>0 && holder_mc.img_mc._height>0)

Где косяк?

silin 24.01.2006 14:31

ну и смотри только _width (что тебе loadedBytes == totalBytes), раз грузишь в создаваемый мувик, а смотришь сетинтервалом..
хотя есть и нормальный класс для этого - MovieClipLoader, в котором, кстати события, которые ты подловил разделены:
onLoadComplete :загрузка завершена, но методы и свойства еще не определены..
onLoadInit :загрузка завершена и контент инициализирован..

ksanster 24.01.2006 15:26

Угу. Наверное есть период у каждого, когда пытаешься все, что уже умные люди сделали, сделать по-своему.
сделал, получилось,забыл. Теперь буду пользовать готовый класс :)

Nox Noctis 24.01.2006 15:50

у каждого есть период, когда пытаешься понять суть вопроса, а не берешь готовый черный ящик. у некоторых этот период не заканчивается вообще, просто максимализм в этом вопросе отпадает. :) но это нечастый случай.

http://noregret.org/tutor/resize/

ksanster 24.01.2006 16:00

Уже прочитал, спасибо.
Но там ничего не говорится о том, что после загрузки картинка еще и должна проинициализироваться.
Кстати, с чего началось это все - свой аналог класса MovieClipLoader написал, он работал нормально. Потом решил уменьшить интервал вызова функции, в которой идет проверка на окончание загрузки - не знаю уже, зачем . Тут и вылезло _width=0
Перефразирую немного: "сделал, разобрался,забыл." :)
Всем спасибо.

Nox Noctis 24.01.2006 16:17

Цитата:

Но там ничего не говорится о том, что после загрузки картинка еще и должна проинициализироваться.
не сказано, потому что это не требуется.

ты используешь setInterval не по назначению.
событие загрузки - асинхронное.
т.е. загрузка может закончиться в любой момент между сменой кадров.
при помощи сетИнтервал ты можешь узнать об окончании загрузки почти в тот момент, когда она завершилась... НО. пока плеер не перерисует загруженное, пользоваться свойтсвами _width и _height не получится. то есть при ближайшей смене кадров всё уже встанет на свои места - а до этого будет глухо.

я в рецепте показываю, как отслеживать загрузку с помощью onEnterFrame. это самый простой рабочекрестьянский метод... он же - безошибочный :)
потому что в момент, когда сработает onEnterFrame, плеер уже перейдет в новый кадр, и если загрузка завершилась - он будет об этом знать, и клип будет доступен для работы.


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

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