Vous êtes ici : Accueil - Ressources Flash - Observateur de l'objet Stage.
Cette article reprend le concept exposé dans une des sources que Colin Moock proposait sur son site. Malheureusement, je ne la retrouve plus; un exemple peut toutefois être vu dans la banderole sur son site, celle qui affiche une espèce de neige provenant de l'horizon : redimensionnez la fenêtre de votre navigateur et observez!!
L'astuce consiste à déclarer des listeners au près de la classe Stage pour ensuite broadcaster certaines méthodes lorsqu'un changement s'opère sur le Stage. Actuellement, la seule méthode que la classe possède, c'est onResize et c'est elle qui va nous permettre de générer une fonction bien en vogue dans les sites Flash : le full-browser, autrement dit, un affichage complet dans la fenêtre d'un navigateur et un redimensionnement/repositionnement des objets sur la scène.
// Classe gestionnaire de l'objet Stage
_global.StageManager = function() {
/* Prise de contrôle du Stage */
// alignement haut/gauche
Stage.align = "LT";
// pas de redimensionnement du contenu Flash
Stage.scaleMode = "noScale";
// ajout d'un listener sur la classe Stage
Stage.addListener( this );
// déclaration de la méthode de replacement
this.onResize = this.onBroadCastStage;
};
var _ST = StageManager.prototype;
AsBroadcaster.initialize(_En); // déclaration du broadcasting
_ST.onBroadCastStage = function() {
// callback sur tous les objets ayant une méthode replaceAfterResizeStage
this.broadcastMessage( "replaceAfterResizeStage" );
}
ASSetPropFlags(_global, "StageManager", 7, 0);
ASSetPropFlags(_ST, "onBroadCastStage", 7, 0);
ASSetPropFlags(_ST, null, 1);
delete _ST;
Il suffit ensuite de définir une fonction replaceAfterResizeStage à tout objet graphique ayant besoin de se positionner à un endroit précis de la scène quelque soit la taille de celle-ci et d'en ajouter la référence à la classe StageManager.
// attach d'un clip sur la scène
this.attachMovie( "mc", "mc", 1);
this.mc.replaceAfterResizeStage = function() {
// le code de repositionnement ici
}
// déclaration du manager
_Stage = new StageManager();
// ajout d'une référence au manageur du clip à maintenir sur la scène
_Stage.addListener( this.mc );
// Rafrachissmenet visuel de tous les objets pour la première instanciation
_Stage.broadcastMessage( "replaceAfterResizeStage" );
Reste ensuite l'intégration html pour générer l'affichage Flash sur toute la surface de la fenêtre d'un navigateur. Il y a deux choses à paramétrer pour cela : mettre la largeur et la longueur du fichier Flash à 100% de l'espace disponible et définir le margin et padding du corps du html à zéro. Pour ce dernier, l'utilisation d'un style sur les tags body et html remplis très bien son rôle.
<style type="text/css">
<!--
html, body {
/* overflow: hidden; */
margin: 0px;
padding: 0px;
}
-->
</style>
L'alignement du stage sur le coin supérieur gauche est un choix qui découle de l'utilisation de Stage.width et Stage.height. En effet, ces valeurs restant inchangées pour une taille donnée de la scène, si le Stage est centré, le point d'origine plus la largeur de la scène donne une ordonnée qui sort de l'animation. Idem pour la hauteur.
Les occurences de la classe MovieClip ne sont pas les seules à bénéficier de ce rafraichissement : d'autres objets ou classes peuvent très bien être référencés au près du StageManager. Gare à la lourdeur du code qui peut découler de l'utilisation abusive du broadcasting. \*0*/
Dans la redéfinission de style du body, certains navigateurs (je ne sais plus exactement lesquels, peut-être Firefox, le problème revient souvent sur les forums) n'affichent pas le flash à 100% de la hauteur disponible. En redéfissant aussi le tag html de la même façon, le problème disparaît sur la majorité des navigateurs (je dis majorité, mais je n'ai pas encore vu de navigateur répétant ce problème d'affichage ou un autre). (edit :) Seul Internet Explorer sur Macintosh affiche une page blanche. (edit2 :) l'attribut overflow dans la css pour enlever l'espace de la srollbarre du navigateur fait afficher cette fameuse page blanche sous IE Mac. Il suffit de l'enlever pour ne plus avoir ce problème.