Вход

Просмотр полной версии : Некорректное чтение _width при загрузке SWF через MovieClipLoader


needForAnswer
26.04.2010, 18:00
Ребята, помогите, пожалуйста.
Загружаю SWF, а при выводе его _width выводится величина, намного превышающая ширину подгружаемого файла:

this.createEmptyMovieClip("w",this.getNextHighestDepth());
_root.w._lockroot = true;

var my_mcl:MovieClipLoader = new MovieClipLoader();
var myListener:Object = new Object();

myListener.onLoadInit = function(target_mc:MovieClip) {
trace(w._width);
};

my_mcl.addListener(myListener);

my_mcl.loadClip("any.swf",_root.w);

Когда загружаю jpeg вместо swf, то ширина правильная выводится.
Если загружаю swf, в которой на первом кадре ничего нет, то trace(w._width) выводит '0'.

Подскажите, что я делаю не так?
Как мне прочитать ширину и высоту подгружаемого swf ?

Psycho Tiger
26.04.2010, 18:50
Дело в том, что он сообщает ширину содержимого, а не ролика.

needForAnswer
26.04.2010, 18:52
Дело в том, что он сообщает ширину содержимого, а не ролика.

А как тогда мне узнать ширину именно ролика?

in4core
27.04.2010, 00:16
Я так понимаю что ролик который будет подгружаться - вы за ранее не знаете? Или же это ваш личный ролик, ширину и высоту которого вы знаете, но все же для каких то целей хотите проверить? ))) В любом случае без разницы. Раз локрут включен, пробуем тащить так trace(w._level0._width); Пишу приблизительно, если не прокатит, то никак. А если ролик именно ваш.То на первом кадре ролика ( пустой он или нет) trace(_root._width); trace(Stage.width)

needForAnswer
27.04.2010, 14:34
Спасибо за ответ, но trace(w._level0._width) выдаёт ещё более непредсказуемый результат ))

А в подгружаемые ролики вносить изменения проблематично: я делаю просмотрщик баннеров из портфолио для чужого сайта. В некоторых есть программная анимация, код может ссылаться на _root, а _lockroot иметь значение по умолчанию.

Вот такая проблема.
Нужели её не решить средствами флеша?

in4core
27.04.2010, 17:10
Вы понимаете что внтуринние swf могут быть масштабируемые через Stage.scale поэтому АДЕКВАТНО поймать ширину и высоту невозможно.

udaaff
27.04.2010, 17:47
in4core, _level0 ссылается на дисплей объект самого верхнего уровня, т.е. в данном случае на _root загружающей флешки.

needForAnswer, в AS1/2 никак не узнать, насколько я помню, если только не передавать размеры отдельно, например, в xml файле или же прописать дополнительные свойства stageWidth и stageHeight в загружаемых swf.

etc
27.04.2010, 17:50
Получить вписанную в ролик ширину с высотой можно в AS3.

in4core
27.04.2010, 18:17
Вообщем я придумал вариант. Не знаю прокатит ли. Выполняйте проверку не по LoadInit а по LoadComplete это первое. Фиг знает авось поможет. Далее. Способ 2 : выполнять проверку уже после лоад инит. Тоесть поставить интервал проверки. скажем 1 секунда. или 0.5 тогда пустых кадров уже не будет и все отлично

udaaff
27.04.2010, 21:12
Нету никаких вариантов, если размеры содержимого не будут совпадать с размерами сцены, то без дополнительных средств не узнать. Только в AS3.

needForAnswer
28.04.2010, 13:45
in4core, etc, udaaff, Psycho Tiger - большое вам спасибо за помощь!
AS 2.0 меня ещё раз огорчил.
Вывод: буду знакомиться и дружить с AS 3.
Результат: задача в итоге была решена без подгрузки swf вовнутрь swf - выручил JavaScript =)

Всем спасибо!

in4core
28.04.2010, 14:46
Хм. Удав вы сильно не правы. Не могу сказать точно щас, но как то пол года назад я писал класс для DataViewer , который грузил все от картинок до видео и swf. Принцип работы вьюверов думаю тебе известен, масштабируется ровно под ролик, так вот все работало прекрасно, масштабирование было сделано именно на АС2. И что самое интересное, насколько я помню был полный игнор пустых кадров, а учитывались тока размеры Stage

udaaff
28.04.2010, 14:51
Ну хорошо. Жду пример получения размеров сцены ролика, размеры содержимого которого, не равны размерам этой самой сцены. :)