Просмотр полной версии : Некорректное чтение _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
Дело в том, что он сообщает ширину содержимого, а не ролика.
А как тогда мне узнать ширину именно ролика?
Я так понимаю что ролик который будет подгружаться - вы за ранее не знаете? Или же это ваш личный ролик, ширину и высоту которого вы знаете, но все же для каких то целей хотите проверить? ))) В любом случае без разницы. Раз локрут включен, пробуем тащить так trace(w._level0._width); Пишу приблизительно, если не прокатит, то никак. А если ролик именно ваш.То на первом кадре ролика ( пустой он или нет) trace(_root._width); trace(Stage.width)
needForAnswer
27.04.2010, 14:34
Спасибо за ответ, но trace(w._level0._width) выдаёт ещё более непредсказуемый результат ))
А в подгружаемые ролики вносить изменения проблематично: я делаю просмотрщик баннеров из портфолио для чужого сайта. В некоторых есть программная анимация, код может ссылаться на _root, а _lockroot иметь значение по умолчанию.
Вот такая проблема.
Нужели её не решить средствами флеша?
Вы понимаете что внтуринние swf могут быть масштабируемые через Stage.scale поэтому АДЕКВАТНО поймать ширину и высоту невозможно.
in4core, _level0 ссылается на дисплей объект самого верхнего уровня, т.е. в данном случае на _root загружающей флешки.
needForAnswer, в AS1/2 никак не узнать, насколько я помню, если только не передавать размеры отдельно, например, в xml файле или же прописать дополнительные свойства stageWidth и stageHeight в загружаемых swf.
Получить вписанную в ролик ширину с высотой можно в AS3.
Вообщем я придумал вариант. Не знаю прокатит ли. Выполняйте проверку не по LoadInit а по LoadComplete это первое. Фиг знает авось поможет. Далее. Способ 2 : выполнять проверку уже после лоад инит. Тоесть поставить интервал проверки. скажем 1 секунда. или 0.5 тогда пустых кадров уже не будет и все отлично
Нету никаких вариантов, если размеры содержимого не будут совпадать с размерами сцены, то без дополнительных средств не узнать. Только в AS3.
needForAnswer
28.04.2010, 13:45
in4core, etc, udaaff, Psycho Tiger - большое вам спасибо за помощь!
AS 2.0 меня ещё раз огорчил.
Вывод: буду знакомиться и дружить с AS 3.
Результат: задача в итоге была решена без подгрузки swf вовнутрь swf - выручил JavaScript =)
Всем спасибо!
Хм. Удав вы сильно не правы. Не могу сказать точно щас, но как то пол года назад я писал класс для DataViewer , который грузил все от картинок до видео и swf. Принцип работы вьюверов думаю тебе известен, масштабируется ровно под ролик, так вот все работало прекрасно, масштабирование было сделано именно на АС2. И что самое интересное, насколько я помню был полный игнор пустых кадров, а учитывались тока размеры Stage
Ну хорошо. Жду пример получения размеров сцены ролика, размеры содержимого которого, не равны размерам этой самой сцены. :)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.