Показать сообщение отдельно
Старый 18.05.2007, 07:30
d0cent вне форума Посмотреть профиль Отправить личное сообщение для d0cent Посетить домашнюю страницу d0cent Найти все сообщения от d0cent
  № 1  
Ответить с цитированием
d0cent
 
Аватар для d0cent

Регистрация: Nov 2005
Сообщений: 106
По умолчанию Загрузка SWF внутрь другого SWF

Ситуация такая: есть несколько 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 в 07:36.