2010-08-23 6 views
0

J'utilise UILoader pour charger des fichiers SWF pour lesquels je n'ai pas de source. Ces fichiers SWF ont été créés dans AS2. Ils utilisent des masques. La largeur et la hauteur renvoient des valeurs non masquées. J'essaie de trouver la largeur et la hauteur visibles du clip afin que je puisse le redimensionner correctement.Dans AS3, comment obtenir la taille visible du fichier SWF chargé contenant un masque?

Par exemple, je veux un fichier SWF pour tenir dans un espace de 50x50. Le SWF visible est 65x65 (mais je ne le sais pas) et la taille non masquée est 100x100. Si je règle la largeur et la hauteur du MovieClip chargé à 50x50, Flash met à l'échelle le clip basé sur la partie non masquée, et j'obtiens un clip beaucoup trop petit. Gardez à l'esprit que je n'ai aucun contrôle sur le contenu SWF, donc je ne peux pas remplacer la largeur/hauteur, ou obtenir la taille du masque.

Répondre

0

quelques idées:

  • Méthode 1- décompiliez swfs AS2, puis remplacer les largeur & propriétés de hauteur pour renvoyer la largeur de masque & hauteur

  • Méthode 2- Insérer un nouvel AS2 swf, qui va essayer & récupérer les dimensions du masque de swf chargé. Comme je n'utilise pas AS2, je vais juste expliquer la logique. Testez la propriété mask de votre film, si elle n'est pas nulle, obtenez la largeur & hauteur, si null, faites le même test sur chaque enfant, si un enfant retourne une vraie valeur, sortez de votre boucle et retournez la largeur & height du masque de l'enfant. Bien sûr, cela ne fonctionnera pas trop bien si plusieurs enfants utilisent des masques, dans ce cas, vous pouvez essayer de trouver ce qui masque est plus grand ...

1

S'il n'y a pas de problèmes crossdomains et le contenu ne sont pas trop grand (BitmapData a une limitation de taille), cela devrait fonctionner:

function handleComplete(e:Event):void { 
    var bmd:BitmapData = new BitmapData(loader.width,loader.height,true,0); 
    bmd.draw(loader); 
    var rect:Rectangle = bmd.getColorBoundsRect(0xff000000,0xff000000,true); 
    trace(rect); 
} 

vous obtiendrez le rectangle englobant tous les pixels dont la valeur alpha est 0xff (complètement opaque).

Questions connexes