Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Ресайзинг загруженной SFW в контейнере (http://www.flasher.ru/forum/showthread.php?t=153489)

alexg 03.04.2011 22:12

Ресайзинг загруженной SFW в контейнере
 
Добрый вечер!

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

Делаю pагрузку следующим образом:

Код AS3:

var ldr:Loader = new Loader(); 
var urlReq:URLRequest = new URLRequest("../intro/intro.swf");
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded);
ldr.load(urlReq);
 
function loaded(event:Event):void
{
        var intro:MovieClip = event.target.content;
/*
        intro.width = logo.width;
        intro.height = logo.height;
*/

        logo.addChild (intro);
}

Если запустить код в таком виде, то контейнер logo растянется до размера загружаемой флэшки intro. А если раскомментировать две строчки - флэшка всё равно не вписывается полностью в контейнер, хоть и становится меньше.

В идеале хотелось бы иметь алгоритм, позволяющий масштабировать флэшку до размера контейнера, независимо от её "оригинального" размера/соотношения сторон.

Буду благодарен за подсказку или пример кода.
Спасибо.

P.S.
Контейнер logo - это обычный статичный MovieClip на сцене.

illuzor 03.04.2011 22:15

Что представляет из себя контейнер? Спрайт?
DisplayObject имеет нулевые размеры, если в нём ничего нет.
Если же внутри что-то есть то размер равен размеру содержимого.

alexg 03.04.2011 22:20

Это MovieClip с вполне заданными размерами.

illuzor 03.04.2011 22:26

http://www.greensock.com/autofitarea/
Может такая штука поможет...

Цитата из хелпа
Цитата:

width свойство
width:Number
Ширина вычисляется на основе границ содержимого экранного объекта.
За исключением объектов TextField и Video, экранные объекты без содержимого (например, пустой спрайт), имеют ширину 0, даже если задать свойству width другое значение.
Аналогично с высотой

alexg 03.04.2011 22:55

illuzor, спасибо. Однако такой фреймворк подключать не хочется - уж больно много там всего, чего не требуется. Мне достаточно только отмасштабировать загружаемый контент под размер контейнера без всяких примочек. Буду благодарен, если кто ещё что-нибудь посоветует по этому поводу.

illuzor 04.04.2011 00:19

alexg, фреймворк весит всего 3.5kb. Это совсем немного. Он очень прост в использовании.
Намного проще, чем писать что-то подобное самому.

Можно ещё рисовать через graphics в мувиклипе прозрачный прямоугольник и затем
Код AS3:

intro.width = logo.width;
intro.height = logo.height;


kseniya 04.04.2011 00:35

Поместите на фон загружаемой флешки шейп или прозрачный спрайт тогда размеры флешки и содержимого будут совпадать. или как вариант прибавляйте к intro.width и intro.height расстояние до самого верхнего левого элемента. или пользуйтесь intro.scaleX/intro.scaleY если вам известны размеры загружаемой флешки
Код AS3:

var h:Number = 300;
var w:Number = 500;
//размер загружаемой флешки
var hr:Number = logo.height;
var wr:Number = logo.width;
//нужно изменить размер до размера logo
intro.scaleY = hr / h;
intro.scaleX = wr / w;


alexg 04.04.2011 01:15

Цитата:

Поместите на фон загружаемой флешки шейп или прозрачный спрайт тогда размеры флешки и содержимого будут совпадать.
Спасибо огромное, получилось! :)


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

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