2008-10-29 15 views
8

Aquí está la situación: tengo un shell que carga un .swf externo. Ahora, ese .swf es 800x600, pero es una pieza de animación, y hay elementos que se extienden fuera del escenario. Cuando cargo el archivo .swf en el shell y llamo a su atributo de ancho, devuelve 1200, porque incluye los elementos que salen del escenario.dimensiones de la etapa del swf cargado

Esto no es lo que quiero, idealmente, habría dos propiedades, una para devolver el 'ancho calculado' y otra para devolver el 'ancho predeterminado'. ¿Estas propiedades existen, y si no, cuál es la mejor solución?

Respuesta

15

El ancho y la altura del archivo SWF cargado según lo definido por el archivo FLA con el que se creó se pueden encontrar en el objeto Loader en el que ha cargado el archivo SWF.

swfLoader.contentLoaderInfo.width 
swfLoader.contentLoaderInfo.height 

Esto siempre le mostrará las dimensiones como se define en las propiedades de FLA. No importa si hay imágenes, MovieClips o lo que sea que extiendas fuera del escenario.

Las propiedades stage.stageWidth y stage.stageHeight siempre devolverán el ancho del escenario, el escenario siempre es el más alto SWF. En otras palabras, siempre representará las dimensiones del escenario de la caparazón. Solo hay una etapa en una aplicación Flash.

+0

Gracias por la sugerencia sobre el atributo 'etapa' - es un poco contradictorio, ¿no? –

+0

¡agradable! ¡Esto funciona totalmente! Nunca se me ocurrió mirar el objeto de información del cargador; por lo general, utilizo una variable desechable para mantenerlo mientras espero que se cargue el contenido "real", pero podría intentar mantenerlo en el futuro. . ¡Gracias! –

+0

mierda, mejor aún, solo puedes decir myMovieClip.loaderInfo.width, en lugar de tener que mantener el swfLoader original en otra variable: ¡todo lo que cargue a través de Loader guarda una referencia a su propio objeto Loader! –

0

Es muy probable que la marca tenga el ancho correcto y la altura del objeto content loader info. Nunca me he revisado, así que no puedo garantizarlo. Los documentos dicen 'nominal' y lo contrastan con 'real', por lo que parece razonable.

Hay un par de otras opciones. Puedes enmascarar el swf externo. Crea una máscara que sea del tamaño de la etapa y pon todo el contenido debajo de ella. Otra idea es crear un clip de película basado en una forma rectangular, establecer su alfa en 0, colocarlo en x: 0, y: 0 y hacer coincidir su ancho y alto con el escenario. Dale un nombre de instancia y luego cuando se carga utiliza ese valor para el tamaño.

+0

Tuve que hacer una solución rápida y no tuve tiempo de ver la respuesta de Matt, y mi solución fue su sugerencia. Hice dos MovieClips dentro del archivo .swf cargado, uno que coincidía con las dimensiones del escenario, y uno que rodeó y excedió los límites creados por los elementos que rompen el escenario. –

Cuestiones relacionadas