2009-06-02 3 views
2

Ich verwende MovieClipLoader, um eine externe as2 SWF-Datei in mein as2-Flash-Projekt zu laden, und ich habe Probleme, die ursprüngliche Bühnengröße des geladenen SWF zu bekommen.Wie kann ich die Breite/Höhe einer geladenen SWF-Stufe in AS2 bekommen?

Wenn ich den folgenden Code ausführen:

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); 
} 

ich seltsame Breite/Höhe Werte (mc._width = 601,95, mc._height = 261,15), wenn, was ich eigentlich will, ist die Bühne Größe der geladenen SWF-Datei, die ich in diesem Fall 300px x 250px weiß.

Irgendwelche Vorschläge geschätzt! Danke

Antwort

3

Das Problem hier ist, dass das geladene swf verliert seine Bühnengröße, wenn es in ein anderes swf geladen wird. Die Stufe des Elternteils wird zur Stufe des geladenen SWF. Wenn Sie die Größe des geladenen SWF wie bei Ihnen anfordern, wird die Breite und Höhe der gesamten Oberfläche des ersten Frames zurückgegeben, nicht die der Bühne.

Die Art, wie ich das in der Vergangenheit gelöst habe, ist eine Movieclip-Instanz auf dem ersten Bild des geladenen swf mit der Größe der Bühne dieses swf zu erstellen. Sobald der swf geladen wurde, können Sie den swf anvisieren und seine Abmessungen erhalten. Das funktioniert natürlich nur, wenn Sie die Kontrolle über den swf, den Sie laden möchten, veröffentlichen.

Um dies in einem Beispiel zu veranschaulichen. Platzieren Sie in Ihrem swf, um geladen zu werden, einen MovieClip (z. B. einen MovieClip eines Rechtecks) auf dem ersten Frame und nennen Sie ihn stage_mc. Wenn Sie jetzt die SWF laden können Sie wie so dass stage_mc Instanz Ziel:

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

Danke, großartige Lösung. Ich habe Kontrolle über das eingebettete swf, also kann ich das tun. :) – loopj

-1

versuchen

stage.width; 
stage.height; 
+0

Frage ist markiert als2 – Luke

+0

Dies ist nicht korrekt. Ein Anzeigeobjekt verliert seine Stufenbreite und -höhe, wenn es dynamisch als externes SWF geladen wird. Am besten fügen Sie einen unsichtbaren MovieClip hinzu, wie Luke in seiner Antwort vorschlägt. – Rafe

0

In AS3 können Sie die Höhe einer geladenen SWF-Datei mit dem Loader Eigentum:

// 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 
Verwandte Themen