2009-06-02 7 views
2

J'utilise MovieClipLoader pour charger un fichier externe as2 swf dans mon projet flash as2, et j'ai de la difficulté à obtenir la taille d'origine du swf chargé.Comment puis-je obtenir la largeur/hauteur de l'étage d'un swf chargé dans AS2?

Quand je lance le code suivant:

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

Je reçois des valeurs largeur/hauteur étrange (mc._width = 601,95, mc._height = 261,15) quand ce que je veux réellement est la taille de la scène de la charge fichier swf, qui dans ce cas je sais être 300px x 250px.

Toute suggestion appréciée! Merci

Répondre

3

Le problème ici est que le swf chargé perd sa taille de scène lorsqu'il est chargé dans un autre swf. Le stade du parent devient l'étape du swf chargé. Lorsque vous demandez la taille du swf chargé, comme vous le faites, il renvoie la largeur et la hauteur de toute la surface de la première image, pas celle de la scène. La façon dont j'ai résolu ceci dans le passé est de créer une instance de MovieClip sur la première image du swf chargé avec la taille de l'étape de ce swf. Une fois le swf chargé, vous pouvez ensuite cibler ce swf et obtenir ses dimensions. Bien sûr, cela ne fonctionne que si vous avez un contrôle de publication sur le swf que vous essayez de charger.

Pour illustrer ceci dans un exemple. Dans votre swf à charger, placez un MovieClip (par exemple un MovieClip d'un rectangle) sur la première image et nommez-le stage_mc. Lorsque vous chargez maintenant le swf vous pouvez cibler cette instance stage_mc comme ceci:

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

Merci, bonne solution. J'ai le contrôle sur le swf intégré afin que je puisse le faire. :) – loopj

-1

essayer

stage.width; 
stage.height; 
+0

question est étiquetée as2 – Luke

+0

Ce n'est pas correct. Un objet d'affichage perd sa largeur et sa hauteur lorsqu'il est chargé dynamiquement en tant que swf externe. Votre meilleur pari est d'ajouter un MovieClip invisible comme le suggère Luke dans sa réponse. – Rafe

0

En AS3, vous pouvez obtenir la hauteur d'un fichier SWF chargé avec la propriété 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 
Questions connexes