AS3 – Redimensionner un SWF chargé

Posted on 05/09/2008 · Posted in Flash

Mise en situation :
deux animations A.SWF, B.SWF
La taille des scènes est de 1024×764 pour A, et 800×600 pour B.

A charge B, et redimensionne B pour le mettre dans la liste d’affichage de A.

Le problème qui peut ce poser est le suivant.
La zone d’affichage intéressante de B est celle de sa scène.
B est construit sur une base de 800×600, et les graphistes placent des éléments graphiques qui font parfois bien plus de 800×600. Lorsqu’on lit B dans le player en stand alone, on ne voit que les 800×600 pixel de la scène, et les éléments qui sont à l’extérieur ne sont pas visibles (hormis si l’on redimensionne la fenêtre à la main).

On va maintenant charger B dans A

1
2
3
4
5
6
7
8
var loaderB : Loader = new Loader ();
loaderB.contentLoaderInfo.addEventListener (Event.COMPLETE, onComplete);
loaderB.load (new URLRequest ("B.swf"));

function onComplete (ev : Event) : void
{
    trace (ev.target.content.width + " " + ev.target.content.height);
}

A première vu, on s’attend à obtenir nos 800×600 et faire un règle de trois pour obtenir la taille adéquate.

Loader.content
Contient l’objet d’affichage racine du fichier SWF ou du fichier d’image (JPG, PNG ou GIF) qui a été chargé à l’aide de la méthode load() ou loadBytes().

La propriété Loader.content nous retournera donc l’ensemble des éléments graphiques de notre fichier B.swf, et Loader.content.width ne retournera pas 800, mais la largeur de l’ensemble des éléments sur la scène de B.

Pour pouvoir récupérer la taille de la scène de B, il faut regarder les propriétés du fichier SWF, et nous allons utiliser le LoaderInfo associé à notre Loader

Loader.contentLoaderInfo
La classe LoaderInfo fournit des informations relatives à un fichier SWF ou à un fichier d’image (JPEG, GIF ou PNG) chargé. Les objets LoaderInfo sont disponibles pour n’importe quel objet d’affichage. Les informations indiquées comprennent la progression du chargement, les URL de l’objet Loader et du contenu chargé, le nombre total d’octets du média, ainsi que la hauteur et la largeur nominales de ce dernier.

Et voila, nous savons maintenant où trouver la taille de la scène.

1
2
3
4
5
6
7
8
var loaderB : Loader = new Loader ();
loaderB.contentLoaderInfo.addEventListener (Event.COMPLETE, onComplete);
loaderB.load (new URLRequest ("B.swf"));

function onComplete (ev : Event) : void
{
    trace (ev.target.contentLoaderInfo.width + " " + ev.target.contentLoaderInfo.height);
}

A noter, sur le forum MediaBox, Dada m’a fait remarquer tout justement, que la propriété DisplayObject.root.loaderInfo renvoyait la même référence que Loader.contentLoaderInfo.