Pantalla completa y escala del escenario
Antes que nada, disculpen mi version en ingles de Flash por lo cual no puedo traducir todo como en la version al castellano. Por otra parte, no sabia sobre que escribir pero una amiga hizo la pregunta “Como hago que mis archivos flash utilicen toda la pantalla?”. Después de eso recordé que difícil me fue encontrar esa información detallada y tuve que agarrar información de varios tutoríales, artículos y capítulos para entender como funcionaba todo este asunto del posicionamiento en pantalla.
Primero que nada, mencionemos la diferencia entre posicionamiento y escala de nuestro documento y utilizar pantalla completa. Cuando hablamos de pantalla completa, le estamos diciendo a Flash que nuestro documento va a utilizar toda la pantalla y no todo nuestro navegador, esto quiere decir que todo incluyendo el menú inicio (en Windows) o el Finder (en Mac) desaparecen, mostrándonos solo nuestra película, así como sucede en YouTube cuando se ve una película en pantalla completa. Hablaremos de el modo pantalla completa mas adelante.
Bien, entonces si el modo pantalla completa no me sirve para hacer que mi documento Flash utilice todo mi navegador, que hay que hacer? Hay que utilizar un poco de HTML y reescalar nuestro documento con ActionScript.
Para empezar puedes descargarte los archivos necesarios para empezar el tutoríal aquí.
Además de nuestro documento Escenario.fla y Escenario.as esta nuestra clase Fondo que dibuja y posiciona el fondo, y es algo parecido a esto:
package { import flash.display.Sprite; public class Fondo extends Sprite { //Sprite en el cual se guardara la informacion //sobre el fondo private var fondo:Sprite = new Sprite(); //Colores y sprites relacionados al fondo private var color:uint = 0x181B1C; private var gota:Gota = new Gota(); public function Fondo():void { } public function init():void { //Agregamos nuestros Sprites addChild(fondo); addChild(gota); dibujarFondo(); } private function dibujarFondo():void { dibujarColor(color); //Posicionamos la gota en el centro del escenario gota.x = stage.stage.stageWidth/2; gota.y = stage.stageHeight/2; } private function dibujarColor(_color:uint):void { //Utilizando la API de dibujo de Flash creamos //un relleno del tamano del escenario fondo.graphics.clear(); fondo.graphics.beginFill(_color,1); fondo.graphics.moveTo(0,0); fondo.graphics.lineTo(stage.stageWidth,0); fondo.graphics.lineTo(stage.stageWidth, stage.stageHeight); fondo.graphics.lineTo(0,stage.stageHeight); fondo.graphics.lineTo(0,0); fondo.graphics.endFill(); // Al principio con la funcion clear() limpiamos // el contenido grafico de neustro sprite para // poder reutilizar este metodo mas adelante } } }
La clase documento Escenario.as solo contiene estas líneas de código:
package { import flash.display.Sprite; public class Escenario extends Sprite { private var fondo:Fondo public function Escenario():void { init(); } private function init():void { fondo = new Fondo() addChild(fondo) fondo.init() } } }
Y Escenario.fla solo tiene el llamamiento a la clase de documento. Dentro de este archivo vayamos a la ventana de configuración de publicación (publish settings) que se encuentra dentro del menú archivo. En la pestaña de formatos asegurémonos que esta marcada la opción de HTML y Flash y publiquemos el archivo.
Con esto se crea un archivo .swf y un .html en la misma carpeta que contiene el .fla. Abramos ese archivo, el cual nos muestra el comportamiento en navegador por defecto que tienen las películas Flash, que obviamente no es el que queremos.
Si revisamos las líneas de código anteriores podemos ver que a través de código posicione la gota en el centro del escenario. Por lo cual si el tamaño del escenario es 550 por 400 sus coordenadas serán 275 en x y 200 en y, y si el escenario midiera lo mismo que el navegador? Si te sientes cómodo en javascript puedes decirle al navegador cuanto mide el documento flash y posicionarlo, etc.
Por otro lado esta la ventana configuración de publicación, pero esta vez en la pestaña HTML.
La primer opción son las opciones de publicación por defecto, de las cuales la mas interesante es Solamente Flash (Flash Only) y Solamente Flash – Permitir pantalla completa (Flash Only – Allow Fullscreen). Por el momento nos quedaremos con la opción de solamente Flash.
La segunda opción es para ajustar el tamaño de nuestro documento Flash, La opción que viene por defecto ajusta el tamaño del escenario al tamaño que nosotros tenemos de manera determinada, por lo cual lo cambiaremos a porcentaje, que se refiere al porcentaje en el navegador, por lo cual si ponemos 100 en ancho y 100 en alto tendremos un documento que utiliza el cien por cien de nuestro navegador.
Lo siguiente será ajustar la calidad a máxima (highest), la siguiente opción la dejamos como ventana, alineado HTML por defecto y la opción de escala es la opción mas importante del proceso, hay que seleccionar en No escalar (No scale).
Se que suena raro que le pongamos que no escale cuando lo que queremos es que escale, bueno la respuesta es sencilla, cuando se le ordena que no escale se le esta diciendo que no escale el contenido de nuestra película (MovieClips, Sprites, BitmapData, etc.) sin embargo el escenario si se escala por que arriba le dijimos que el escenario es proporcional al cien por cien de nuestro navegador.
La alineación de nuestra película la necesitamos a la izquierda (Left) y arriba (Top).
Nuestra configuración debió de quedar así:
Después de verificar que esta igual que el pantallaza anterior (o su homologo en castellano) publicamos la película.
Al reescalar nuestro navegador vemos que la película flash no se escala correctamente, esto se soluciona indicándole a Flash donde se posicionara la película, que para funcionar correctamente necesita estar en la esquina superior izquierda. Parece que ya habíamos hecho esto, pero las modificaciones de la publicación eran para el HTML, necesitamos decirle a Flash por otra parte done tiene que posicionar el escenario. Para eso necesitamos importar la clase StageAlign (alinear escenario), para ello añadimos estas líneas de código:
//Después de importar la clase Stage //La clase StageAlign le dirá a flash donde tiene que //posicionar el escenario import flash.display.StageAlign; //Dentro del metodo init() //Indicamos la posicion que tomara el escenario //en nuestro navegador stage.align = StageAlign.TOP_LEFT;
Agregamos el código y re-publicamos la película Flash.
Si abrimos el HTML veremos que neustro documento utiliza todo el browser y la gota esta en el centro, pero si la reescalamos la gota se queda en su sitio, además hay un borde muy molesto cubriendo nuestro documento.
El primer problema lo podemos resolviendo agregando estas líneas de código:
//Antes de declarar el nombre de nuestra clase //Importamos la clase evento para acceder al evento //RESIZE y la clase Stage para trabajar con el escenario import flash.events.Event; import flash.display.Stage; //Dentro de la funcion init() //Añadimos un Listener para que ejecute la function //dibujarFondo cuando reescalemos la pantalla stage.addEventListener(Event.RESIZE, onDibujarFondo); //Dentro de la clase //Metodo al que llamara el evento re-escalar que a su vez //llamara al metodo dibujarFondo() private function onDibujarFondo(event:Event):void { dibujarFondo(); }
La razón por que dentro de la funcion dibujarFondo hiciera un llamamiento a la funcion graphics.clear() al inicio es por que en este caso el fondo es un color y cada que se reescale el navegador ese relleno de color tiene que desaparecer y ser sustituido por un relleno nuevo. En caso de que no tengas un color como fondo, puedes crear tu metodo con el cual reposiciones los elementos que a ti te interesan.
Ahora para solucionar el problema del borde blanco ingresamos en nuestro documento HTML y agregamos las siguientes líneas dentro de <head>:
<style type="text/css"> body {margin:0px;padding:0px;} </style>
Con esto ya tenemos un documento que utiliza todo el navegador y que reposiciona el contenido. Solo nos falta hablar sobre el modo pantalla completa que mencionamos anteriormente. Para ello necesitamos regresar a la configuración de publicación y cambiar el témplate por Flash Only – Allow fullscreen ( Flash solamente – Permitir pantalla completa). Y agregar estas líneas de código en nuestra clase de documento:
//Importamos las clases necesarias para activar el modo pantalla //completa import flash.display.Stage; import flash.display.StageScaleMode; import flash.display.StageDisplayState; import flash.events.MouseEvent; //Dentro de el metodo init: //Anadimos un listener para que al momento de pinchar sobr //el escenario entre en el modo pantalla completa addEventListener(MouseEvent.MOUSE_UP,onPantallaCompleta); //Creamos un metodo que reescale el escenario public function onPantallaCompleta(event:MouseEvent):void { if (stage.displayState == StageDisplayState.NORMAL) { stage.displayState= StageDisplayState.FULL_SCREEN; } else { stage.displayState=StageDisplayState.NORMAL; } }
Ya terminamos, con esto tenemos una película que utiliza toda todo el navegador y es capaz de entrar al modo pantalla completa. Pero se le puede sacar mas partido a este tema y puedes hacer que una imagen cree un patron y se distribuya por la pantalla, o puedes hacer una imagen como fondo.
Solamente hay que mencionar unos pequeños detalles sobre el modo pantalla completa, cuando nuestra película entra en modo pantalla completa los campos de introducción de texto se deshabilitan y sale un aviso anunciándole al usuario que esta entrando en pantalla completa y como salir.
Puedes descargarte el archivo terminado del ejercicio aquí .










