2009-06-02 3 views
2

Я использую MovieClipLoader для загрузки внешнего файла swf as2 в мой flash-проект as2, и мне трудно получить исходный размер сцены загруженного swf.Как я могу получить ширину/высоту загруженного этапа SWF в AS2?

Когда я запускаю следующий код:

var popup:MovieClip = _root.createEmptyMovieClip("popup", 1); 
var loader:MovieClipLoader = new MovieClipLoader(); 
var loadHandler:Object = new Object(); 
loader.addListener(loadHandler); 
loader.loadClip(url, popup); 
loadHandler.onLoadInit = function(mc:MovieClip) { 
    trace(mc._width + ", " + mc._height); 
} 

Я получаю странные значения ширины/высоты (mc._width = 601,95, mc._height = 261,15), когда то, что я на самом деле хочу это размер стадии нагруженная swf, который в этом случае я знаю, что 300px x 250px.

Любые предложения оценены! Thanks

ответ

3

Проблема заключается в том, что загруженный swf теряет размер сцены, когда он загружается в другой swf. Стадия родителя становится этапом загруженного swf. Когда вы запрашиваете размер загруженного swf, как и вы, он возвращает ширину и высоту всей поверхности первого кадра, а не сцены.

Способ, которым я решил это в прошлом, - создать экземпляр мувиклипа в первом кадре загруженного swf с размером сцены этого SWF. Как только swf будет загружен, вы можете настроить таргетинг на swf и получить его размеры. Конечно, это работает только в том случае, если вы публикуете контроль над swf, который вы пытаетесь загрузить.

Чтобы проиллюстрировать это в примере. В вашем swf для загрузки разместите мувиклип (например, мувиклип прямоугольника) на первом кадре и назовите его stage_mc. Теперь при загрузке SWF вы можете настроить таргетинг, что stage_mc экземпляр так:

loadHandler.onLoadInit = function(mc:MovieClip) { 
    trace(mc.stage_mc._width + ", " + mc.stage_mc._height); 
} 
+0

Спасибо, отличное решение. У меня есть контроль над встроенным swf, поэтому я могу это сделать. :) – loopj

-1

попробовать

stage.width; 
stage.height; 
+0

вопрос помечен как2 – Luke

+0

Неправильное. Экранный объект теряет свою ширину и высоту сцены, когда динамически загружается как внешний swf. Лучше всего добавить невидимый мувиклип, как предлагает Лука в своем ответе. – Rafe

0

В AS3 вы можете получить высоту загруженного SWF со свойством LoaderInfo:

// imports 
    import flash.display.LoaderInfo; 

// loading code 
    var loader:Loader = new Loader(); 
    loader.load(new URLRequest('some_swf.swf')); 
    loader.contentLoaderInfo.addEventListener(Event.INIT, loaderInitHandler); 

// listener 
    function loaderInitHandler(event:Event):void 
    { 
     var info:LoaderInfo = event.target as LoaderInfo; 
     trace('Loaded swf is ' + info.width + ' x ' + info.height + ' px'); 
    } 

// Loaded swf is 500 x 300 px