Вход

Просмотр полной версии : Загрузка SWF внутрь другого SWF


d0cent
18.05.2007, 07:30
Ситуация такая: есть несколько swf роликов, и есть один swf с интерфейсом, и "экранчиком" в котором эти самые swf должны крутиться. Загружаю в основную флешку один из этих роликов посредством MovieClipLoader. Флешка загружается, но обнаруживаются неприятные вещи:

1. так как основная флешка "резиновая", занимает весь экран браузера и способна тянуться под его размеры, сохраняя при этом неизменным размер и форматирование всех элементов интерфейса, включая "экранчик" в который грузятся внешние флешки - загружаемые флешки не получается закрепить на одном нужном месте, хотя мувиклип в который флешки грузятся, обрабатывается "выравнивающим" скриптом как и остальные элементы интерфейса.
2. подгружаемая флешка берет некий текст из txt файла, если ее отдельно запускать все нормально, но если она открывается внутри основной флешки - текст в ней не грузится.

Привожу свой код:

// настройки сцены
Stage.scaleMode = "noScale";
Stage.align = "TL";

// создадим объект для реагирования на изменение габаритов окна
var resize_obj = {};

// запомнили нормальную ширину
resize_obj.normal_width = 800;

// запомнили нормальную высоту
resize_obj.normal_height = 600;

// самое главное: список объектов, которые будем перемещать
resize_obj.position = [fon, ramka, bg];

// собственно, реакция на изменения габаритов окна
resize_obj.onResize = function()
{
var clip;
for (var i in this.position) {
// перебираем все клипы в списке
clip = this.position[i];

// восстанавливаем пропорции координат для каждого клипа
clip._x = Stage.width*clip._xRatio;
clip._y = Stage.height*clip._yRatio;

// если для клипа определена пропорция по ширине
if (clip._widthRatio != undefined) {
clip._width = Stage.width*clip._widthRatio;
}
// если для клипа определена пропорция по высоте
if (clip._heightRatio != undefined) {
clip._height = Stage.height*clip._heightRatio;
}
}
};

// связь между классом Stage и объектом resize_obj
Stage.addListener(resize_obj);

/* запоминаем пропорции координат
(отношение координат к нормальной ширине/высоте) */
var clip;
for (var i in resize_obj.position) {
// перебираем все клипы в списке
clip = resize_obj.position[i];

// пропорция координаты по горизонтали
clip._xRatio = clip._x/resize_obj.normal_width;

// пропорция координаты по вертикали
clip._yRatio = clip._y/resize_obj.normal_height;
}

/* запоминаем пропорции высоты и ширины
(отношение габарита к нормальной ширине/высоте) */
fon._widthRatio = fon._width/resize_obj.normal_width;

// подгружаем внешнюю флешку
var my_mcl:MovieClipLoader=new MovieClipLoader();
var my_obj:Object=new Object();
my_mcl.loadClip("house.swf",bg);
my_mcl.addListener(my_obj);

//ресайз
resize_obj.onResize();

d0cent
18.05.2007, 23:55
Вобщем, первую проблемму решил, просто добавив прозрачный фон флешке и разместив ее в нужном месте экрана с помощью HTML. А вот со вторым вопросом, почему подгружаемая флешка не открывает текстовый файл не разобрался. Гуру, помогите плиз.

screamge
19.05.2007, 00:06
Ответ на второй вопрос скорее всего в путях, к сожалению нет этой части скрипта что бы дать досканальный ответ.

etc
19.05.2007, 00:07
А _root используется в подгружаемой флешке?

d0cent
19.05.2007, 01:32
А _root используется в подгружаемой флешке?

Теперь да, но что с ним что без него - на результате никак не сказывается

etc
19.05.2007, 01:43
А должно. _lockroot в помощь. Если не поможет — выкладывайте исходник.

d0cent
19.05.2007, 02:25
А должно. _lockroot в помощь. Если не поможет — выкладывайте исходник.

Не совсем понял в какую флешку пихать _lockroot в загружающую или в загружаемую?

d0cent
19.05.2007, 04:38
_lockroot не помог, или я не так его использовал.
А вот код, который загружает текст из файла в загружаемой флешке:
var my_lv:LoadVars = new LoadVars();
my_lv.onData = function(txt:String):Void {
txt1.html = true;
txt1.wordWrap = true;

txt1.htmlText = txt;
};
my_lv.load("text1.html");

screamge
19.05.2007, 05:23
нужно на текстовое поле txt1 ссылку давать от рута подгружающего

d0cent
19.05.2007, 05:28
нужно на текстовое поле txt1 ссылку давать от рута подгружающего

А подробней можно? Как ссылка выглядит?

screamge
19.05.2007, 05:31
_root[имя контейнера].txt1.htmlText = 'vash tekst'

*имя контейнера - это имя мувиклипа в который грузится второй swf с текстовым полем

d0cent
19.05.2007, 05:46
_root[имя контейнера].txt1.htmlText = 'vash tekst'

*имя контейнера - это имя мувиклипа в который грузится второй swf с текстовым полем

это все в подгружаемой флешке?

screamge
19.05.2007, 05:55
да, если не получится выкладывайте исходник.

d0cent
19.05.2007, 06:02
не работает. а исходники все выше были.

screamge
19.05.2007, 06:16
В таком случае все рабочие варианты тоже выше, выбирайте.

d0cent
19.05.2007, 06:25
В таком случае все рабочие варианты тоже выше, выбирайте.

так не подходит. Вот то что вы превили, вставил в загружаемую флешку, и никакого результата.

etc
19.05.2007, 13:16
Не совсем понял в какую флешку пихать _lockroot в загружающую или в загружаемую?
Документацию совсем лень читать?
Выкладывайте исходник.

d0cent
19.05.2007, 19:40
Вот в основной флешке подгружается вторая:

// подгружаем внешнюю флешку
var my_mcl:MovieClipLoader=new MovieClipLoader();
var my_obj:Object=new Object();
my_mcl.loadClip("house.swf",bg);
my_mcl.addListener(my_obj);


А вот в подгружаемой флешке подгружается текст из файла:

var my_lv:LoadVars = new LoadVars();
my_lv.onData = function(txt:String):Void {
txt1.html = true;
txt1.wordWrap = true;

txt1.htmlText = txt;
};
my_lv.load("text1.html");


Народ, другого кода там нет совсем. Все вот так примитивно.

etc
19.05.2007, 20:49
Ошибки выдает какие-нибудь? Трейст текстового поля что выдает?

d0cent
19.05.2007, 21:24
Ошибки выдает какие-нибудь? Трейст текстового поля что выдает?

Ну если отдельно загружаемую флешку запустить - там все нормально. Здесь не пробовал трейсить, так как и не знаю точно, какой там путь то должен быть внутрь загружаемой флешки - не разбирался еще.

etc
19.05.2007, 21:45
Так вот надо сначала разобраться.

d0cent
22.05.2007, 03:02
Ну вобщем, если трейсить txt1, то в случае если работать с загружаемой флешкой отдельно (там текст показывается), выдает _level0.txt1, а если делать это в загружающей флешке, там пишет _level0.bg.txt1. Только мне это мало о чем говорит. Что делать-то?

d0cent
22.05.2007, 04:12
Пошарил по форуму, и обнаружил, что оказывается под маской DynamicText - не катит, вот почему он у меня и не виден был, так ак в загружающей флешке есть маска. Но если маску убрать, тогда становится видно все то чего недолжно быть видно в подгружаемой флешке - все что находится за краями ее кадра! Народ, как эту фигню обойти, а?

Kikasso
22.05.2007, 05:23
а маску сажать с помощью setMask не пробовали?

d0cent
22.05.2007, 06:24
а маску сажать с помощью setMask не пробовали?

Нет, а как это? Я дизайнер, не программер, мне бы минимум коддинга - максимум "спецэфектов"...

Пока что вышел из положения с помощью Embeded, правда это раздуло флешку на лишних 200 килобайт.

Kikasso
22.05.2007, 06:53
В хелпе посмотрите, что такое setMask. Это элементарно.
А почему раздуло на 200кб? Вы что, включили ВСЕ символы?

d0cent
22.05.2007, 07:35
В хелпе посмотрите, что такое setMask. Это элементарно.
А почему раздуло на 200кб? Вы что, включили ВСЕ символы?

Ну да, а какие там включить что бы были видны русские и латинские символы? Кстати почему-то при этом имеющиеся в тексте теги перестали работать, хотя там и используется htmlText и до Embeded, HTML нормально работал.

Kikasso
22.05.2007, 08:02
Тэги <b> <i> и <font size="" > ?
Для каждого варианта придется сделать свое текстовое поле, зашить в него символы и положить вне сцены.
Включить латинские, русские, знаки препинания и цифры. Русского диапазона там нет, кириллица несколько другое (раз в 10 больше), зато внизу есть поле для ручного ввода. Вот туда рекомендую весь русский алфавит (и большие, и маленькие буквы) и вставить. Тупо, но работает.
setMask() позволяет ничего не зашивать, и все будет видно через маску.

d0cent
22.05.2007, 23:48
ну вобщем делаю bg.setMask(mask1); , где bg - мувиклип в который грузим внешнюю флешку, mask1 - маска для него. И не пашет - вижу прямоугольник "маски" поверх клипа. Зато если написать вот так setMask(mask1); то действительно маскирует, но при этом не вижу так же элементов загружающей флешки, который находятся за пределами маски.

d0cent
29.05.2007, 22:14
так что, больше никаких идей что ли?

sem1313
30.05.2007, 01:38
увидеть бы твой проект... так бы может и подсказали что... А вообще проверь правильность инстансов(имен клипов)