Как я могу получить ширину / высоту сцены загруженного SWF в AS2? - PullRequest
2 голосов
/ 02 июня 2009

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

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

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-файла, который в этом случае, как я знаю, составляет 300 x 250 пикселей.

Любые предложения приветствуются! Спасибо

Ответы [ 3 ]

3 голосов
/ 02 июня 2009

Проблема здесь в том, что загруженный 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 голосов
/ 31 марта 2010

В 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
0 голосов
/ 02 июня 2009

попробуй

stage.width; 
stage.height;
...