Вход

Просмотр полной версии : SWFObject, габариты swf и динамически загружаемых клипов


mike_z
18.03.2008, 16:16
Добрый день.
На неких ресурсах лежат различные "клипы" (swf, jpg, gif).

Я вставляю через SWFObject свой swf, который грузит соот-ий клип,
на основании передаваемых параметров.

var so = new SWFObject("/images/myloader.swf","mymovie","200","100","7","#336699");
so.addVariable("MovieSource", "http://remote_site/clip/clip_1.gif");


В моем "флэше" получаемые переменные обрабатываются следующим образом:

stop();
if (MovieSource != undefined) {
this.createEmptyMovieClip("image_mc", 0);
this.image_mc.loadMovie(MovieSource);
}


1. Что делать, если клип с удалённого ресурса будет размером 800х600,
например? Как поменять размер отображаемого swf?

2. *.fla создан с размером документа (550Х400 pix). Если, допустим, грузится клип размером 50Х50 то он вставляется в документ 540х400,
а потом этот документ уже сжимается до 200х100 (размеры переданные через SWFObject) и загружаемый клип превращается вообще в мини эконку.

Таки образом, если клип больше, размера документа созданного во fla? то он сжимается до размера документа, а если меньше то становится еще меньше.

Как сделать чтобы флэш отображаемый в браузере имел габариты\размеры загружаемого клипа? Если, на этапе генерации страницы я не знаю размеров клипа (т.е. не могу SWFObject-у сразу задать габариты).

В publish fla не нашел как это сделать, к размеру документа тоже "достучаться" не смог (думал _root._height поможет).

mike_z
18.03.2008, 19:33
Возможно я неясно выразился.
Хочется чтобы в браузере отображался флэш, ширина и высота которого
равна ширине и высоте картинок, которые данный флэш подгружает с внешних сайтов.

nyctota
18.03.2008, 20:32
Видимо, придется делать примерно так:

1. создавать SWFObject каких-то произвольных размеров, например 0, 0
2. грузить нужный файл в image_mc
3. после окончания загрузки проверять размеры image_mc
4. через ExternalInterface вызывать JavaScript функцию, которая установит нужные размеры для SWFObject

Вот... мда.

mike_z
19.03.2008, 11:27
Спасибо, не слышал пока об ExternalInterface.
А как после загрузки изображения во флэш поменять размер документа fla, (который изначально был 550х400), на размер загруженного изображения?

crazyone
19.03.2008, 11:46
В первом кадре пропишите

Stage.scaleMode="noScale";
Stage.align="TL";

Это заставит флеш не растягивать и не сжимать содержимое флешки.
Потом - когда загрузили, вызываете жабоскриптовую ф-ю, которая ставит нужные размеры вашему swfObject'у на странице.

mike_z
20.03.2008, 13:07
Исполльзовал следующий preloader:

F_preloader = function (mc) {
_root.createEmptyMovieClip("detect_mc", 100);
_root.createTextField("tf_txt", 200, 200, 190, 150, 20);
detect_mc.onEnterFrame = function() {
trace("Entering onEnterFrame");
var gbl = _root[mc].getBytesLoaded();
var gbt = _root[mc].getBytesTotal();
if (gbl == gbt && gbl>30) {
tf_txt.text = "100%";
trace(_root[mc]._height);
removeMovieClip(this);
} else {
tf_txt.text = int(gbl/gbt*100)+"%";
}
};
};
_root.createEmptyMovieClip("mc_show", 1);
ant.ru:3001/images/al_166_110.jpg");
mc_show.loadMovie("hypercube3.3.swf");
F_preloader("mc_show");


Почему строка помеченная в коде красным выдает в лог "0".
Ведь клип то уже загрузился?
ЗЫ Вместо этой выдачи думал вставить вызов яваскрипта "дергающего" SWFObject.

crazyone
20.03.2008, 14:38
Ужасный какой-то прелоадер. Мне лично в его багах лень разбираться. Используйте класс MovieClipLoader. Описание класса - в хелпах.

mike_z
20.03.2008, 16:44
Сделал как было задумано, НО тогда получается, что я буду загружать картинку 2 раза :(
1. SWFObject вставляет флэш
2. флэш загружает картинку
3. по переданным параметрам определяет вставляется ли он (флэш) первый раз
4. если первый, то вызывает через ExternalInterface SWFobject
и мы переходим к п.1, после чего картинка грузится 2-ой раз.

Может мы пошли неверным путем и есть еще какое-нибудь решение проблемы?

Может как нить можно загрузить картинку "в сам флэш" или кэш браузера,
а потом SWFObject загрузит флэш или картинку из кэша браузера?