![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: May 2008
Сообщений: 41
|
Размера, в смысле ширины и длины. То есть имеем динамическую загрузку xml и последовательную загрузку картинок в клип по нажатию на определенные кнопки. Примерно так:
Окошко слайд-шоу имеет размеры, к примеру, 800Х600. Размеры изображений, лежащие в определенной для них папке неизвестны (предположительно, они больше). Существует ли возможность определения размеров (_width и _height) каждого изображения во время подгрузки (нажатие на кнопки "вперед" или "назад") и динамической их подгонки под размеры слайд-шоу во время отображения? |
|
|||||
|
Цитата:
используйте для подгрузки изображений loadMovieClip-Класс, примерно так: var mclListener:Object = new Object(); mclListener.onLoadStart = function(target_mc:MovieClip){ preloader.percent.text = "0%"; }; mclListener.onLoadProgress = function(target_mc:MovieClip, bytesLoaded:Number, bytesTotal:Number) { preloader.percent.text = Math.round(bytesLoaded/bytesTotal*100) + " %"; }; mclListener.onLoadComplete = function(target_mc:MovieClip) { Tweener.addTween(preloader, {_alpha:0, time:1.800000, transition:"easeOutExpo", onComplete:function () { Tweener.addTween(img_conteiner, {_alpha:100, time:2.000000, transition:"easeOutExpo"}); }}); }; mclListener.onLoadInit = function(target_mc:MovieClip) { trace(target_mc._width); // выдаёт значение _width img_conteiner`а trace(target_mc._height); // выдаёт значение _height img_conteiner`а }; var image_mcl:MovieClipLoader = new MovieClipLoader(); image_mcl.addListener(mclListener); image_mcl.loadClip("путь к текущему изображению", img_conteiner); |
|
|||||
|
Регистрация: May 2008
Сообщений: 41
|
Естественно, после загрузки каждого изображения. Некорректно выразился. К вашему примеру. Я как раз использую класс loadMovieClip. В этой части мой код немного проще, по-сути, отлавливается только событие onLoadComplete (не используется предзагрузчик - десктопное приложение) и как будто бы все понятно (хотя хотелось бы поподробней что есть Tweener.addTween). Но что делать после onLoadComplete? img_conteiner создается при помощи createEmptyMovieClip(), а простая проверка окончания загрузки каждого изображения
возвращает два ноля, хотя ожидалось, что контейнер примет размеры содержимого. Где изъян в рассуждениях?
|
|
|||||
|
Попробуйте использовать событие onLoadInit вместо onLoadComplete.
|
|
|||||
imgLoadListener.onLoadInit = function(target_mc:MovieClip) { trace(target_mc._width); // выдаёт значение _width img_conteiner`а trace(target_mc._height); // выдаёт значение _height img_conteiner`а }; А дальше можно скалить изображение для подгонки под размеры "сцены", на случай если изображения будут произвольной величины. |
|
|||||
|
Регистрация: May 2008
Сообщений: 41
|
onLoadInit решило проблему. Всем спасибо!
|
|
|||||
|
Регистрация: May 2008
Сообщений: 41
|
Не думал я, что снова придется поднимать эту тему...
Но возникла новая проблема. Суть ее в следующем: в слайд-шоу предусмотрена возможность изменения размера картинок. То есть имеем ролик размера 800Х600. Размеры картинок передаются из атрибутов XML. На событие onLoadInit повесил код со сложным ветвлением, вычисляющий какого размера должна быть картинка: если ее ширина и длина больше, чем 800Х600 - она ужимается, если меньше - выводится без изменений. Весь код обработчика довольно длинный, приведу фрагмент, используемый в случае, если картинка больше 800Х600 else if (img_width > 800) { if (img_width > img_height) { scale = img_width / 800; page_mc._width = 800; page_mc._height = Math.round(img_height / scale); } else if (img_width < img_height) { scale = img_height / 600; page_mc._height = 600; page_mc._width = Math.round(img_width / scale); } } page_mc - клип, в который загружается изображение. Ему принудительно назначается ширина 800 (в случае, если ширина больше высоты), а высота вычисляется в зависимости от величины scale, которая характеризует, во сколько раз ширина картинки больше ширины ролика. Все это очевидно и тривиально. Программа замечательно работала с картинками 400х400, 400х600, 800х600 и т.д. Самая большая картинка была 2848х2136, самая нестандартная 2592х3888. Радость моя кончилась, когда в папку были добавлены изображения 3888х2592. Что произошло? Значительная область с правой стороны оказалась просто срезанной, не ужатой, а именно срезанной; она исчезла, а картинка, не взирая на то, что она в разы шире чем 800, видимо за счет того, что изрядный кусок канул где-то в черной дыре, растянулась по ширине! Если же изменить реальный размер картинки, например, до испытанных уже 2848х2136, не исправляя ничего в XML (а если исправить, то и подавно), все выводится как положено. И еще один загадочный, почти мистический момент. Если мы после строчки, где задается page_mc._width = 800, поставим trace(page_mc._width ), выводить будет (при загрузке картинок) 800, 799.99, 799.95, 800, 799.99. И это при том, что 800 задано принудительно! Вот такая повесть получилась, почти роман. Кому было интересно, прошу поделиться соображениями. Последний раз редактировалось starserfer; 20.02.2009 в 03:42. |
|
|||||
|
Ну я бы попробовал _yscale / _xscale вместо _width / _height. Затем, возможно существует ограничение по размеру картинки, ограничение по битмапу же есть (2880 пикселей по любой стороне). На счет размеров, писал много раз что флеш весьма неточен, он переводит число в двоичный код, а потом обратно, отсюда и погрешность, хотя вобщем то это ж незаметно в данном случае.
З.Ы. а зачем размер каринки пиать в хмл если пользуетесь мувиклиплоадером?..можно ж узнавать при загрузке и оттуда плясать (меньше букавак в хмл, а в код всего + 2 строчки) |
|
|||||
|
Регистрация: May 2008
Сообщений: 41
|
Предположение об ограничении размера картинки действительно выглядит правдоподобным, поскольку я уже говорил, что при уменьшении ширины изображения до 2848 все работает нормально. И у меня были предположения на этот счет. Но где можно поподробнее прочитать об этих ограничениях? Откуда взялось число 2880? В мануале вроде не встречал.
По поводу данных из атрибутов XML. Вначале я и не собирался прописывать там ширину и высоту картинки, полагая, что при каждой загрузке функция сама будет возвращать текущий размер. Однако, вероятно, существует какая-то тонкость, которую я не уловил, заключающаяся в том, что размер (_width) не каждой картинки определялся корректно (возможно, из-за той погрешности, о которой упомянул nOobCrafter). Поэтому и упростил таким образом. И последнее. Почему _yscale / _xscale кажется предпочтительней? Не дают погрешности? |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:30. |
|
|
« Предыдущая тема | Следующая тема » |
|
|