Comunidad de diseño web y desarrollo en internet online

Problema con máscaras y tamaños


Tiene solución
0%
 0%  [ 0 ]
No sé
100%
 100%  [ 1 ]
Votos Totales : 1

Citar            
MensajeEscrito el 14 Jun 2008 04:45 pm
Hola a todos. Desde que aparecieron las máscaras, yo las uso desde Flash 5... siempre no me han gustado por dos cosas:

* Hay que tener mucho cuidado con los textos. Eso se arregla fácilmente de mil formas, añadiendo fuentes, caracteres... o cualquier otra forma obteniendo, casi siempre, buenos resultados.
Pero el problema no es ese, si no este otro, que aun en AS 3.0 sigue dándome problemas.

* Flash no distingue, o eso creo, entre tamaños reales y tamaños mostrados. Me explico: si tienes un clip con un cuadrado dentro de 200x200 que le llamas 'cuadrado' de fondo azul y sin borde y junto a ese clip tienes otro con un círculo de 100x100 de fondo verde y sin borde en en centro del cuadrado que le llamas 'circulo' y y todo eso dentro de un clip llamado 'todo'...

____
|
o |
¨¨¨¨¨


... por AS le pones a 'cuadrado' la máscara 'circulo' con un "with(todo) { cuadrado.mask = circulo; }" lo que hará visualmente es mostrarte solo un círculo de 100x100 de tamaño de color azul...


o


... y hasta aquí todo va bien. El problema aparece en los tamaños del heigth (alto) y weigth (ancho), que simplemente no se modifican. Si antes "trace( todo.heigth );" produce un 200 tanto antes como después de activar la máscara. Lo mismo pasa con un "trace( todo.weigth );", que produciría esos 200 px de ancho antes y después.
Si no veis el problema, es sencillo: antes 'todo' sí que mide 200x200 pxs pero después debería ser solo 100x100 pxs y no lo hace así.

La solución que me planteaba era la existencia de otros indicadores de alto y ancho, por ejemplo, "todo.weigthWOmask" y "todo.heigthWOmask", que serían los que mantenería indicando que el tamaño real sin (WO-) máscara (-mask), es decir, 200x200 y que los "todo.weigth" y "todo.heigth" se modificaran a un tamaño visible bajo la mácara, es decir, 100x100.

Y ¿por qué no valdría crear unos campos que hicieran el cálculo para el tamaño visible? Pues porque el tamaño es hereditario en cascada, así que si 'todo' lo metes en otro clip 'escena', ésta tendría el valor también del "todo.weigth" y "todo.heigth" y, por lo tanto, sería incorrecto hasta el root.

PD. El 'error' también afecta a la posición x en parte, ya que realmente la posición 'x' de 'todo' no se modifica al aplicar la máscara.

Si quieren más información, no duden en preguntármela. Pero creo que está claro, ¿no?
-----
Como ya he migrado a AS 3.0, el código está en ese lenguaje y la solución, si hay, me gustaría que fuera compatible con este lenguaje.

Por enWILLYado

30 de clabLevel



Genero:Masculino  

2004

msie7
Citar            
MensajeEscrito el 19 Jun 2008 05:46 pm
El problema no es en si un problema, cuando le pides que te devuelva el ancho, al alto, la posicion o la escala (es decir cualquier parámetro), te lo devuelve del displayObject que contiene el cuadrado y el circulo y este displayObject en realidad contiene dos displayObjects más, independientemente de que uno esté enmascarando a otro, por lo tanto su ancho, por ejemplo es el tamaño del cuadrado que tiene dentro (el más grande) aunque esté enmascarado.

Yo te recomiendo que si quieres determinar el ancho, alto o posicion del resultado enmascarado, saques una simple cuenta aritmética:

Código :


//La posición del resultado visual es la posición del objeto todo más la posición de la mascara
var posX:Number = todo.x +  circulo.x;
var posY:Number = todo.y +  circulo.y;


//El ancho o el alto es el de la mascara en si
var ancho:Number = circulo.width;
var alto:Number = circulo.height;

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 19 Jun 2008 06:50 pm
Hola, gracias pro tu respuesta.

El problema es al hacerlo genérico. Lo de 'todo', 'circulo' y todos esos nombres de clip son solo ejemplos. Además, si el clip 'todo' lo metes a su vez en otro clip 'supertodo', éste seguirá teniendo las variables ancho y alto (que son las que me importan en concreto) como el ancho máximo de todos estos clips.

Por desgracia, cada día pienso que es más imposible sin cambios mayores (sin por ejemplo crear una variable _ancho que se tenga que declarar y calcular en cada creación de clip) y trabajar con ella. Espero que en versiones siguientes de AS se pueda arreglar este fallo o desajuste.

Ah, antes de terminar, decir la incapacidad que veo cuando ejecutas esto:
Más que nada, el ejemplo práctico de esto sería por ejemplo crear un scroll real de texto e imágenes mediante la técnica de desplazar el clip 'contenedor' que tiene todo el texto con AutoSize, una máscara dinámica 'maskara' que enmascara con un mask(...) a 'contenedor' de un tamaño menor, y un 'scroll' que va modificando la, for instance, _x del 'contenedor' dependiendo de la posición de _xmouse sobre él.
Si ahora metemos todo eso en un clip 'textoCONscoll' y le queremos remarcar con un 'fondo' de fondo con el ancho del clip 'textoCONscoll' más 10 y el alto más 10 y con una _x e _y de 'textoCONscol'._x - 5 y 'textoCONscol'._y - 5 ... el resultado nos sale de madres y no es el esperado; la culpa: lo que he comentado.

Un saludo y a ver si alguien ve solución a eso.

Por enWILLYado

30 de clabLevel



Genero:Masculino  

2004

msie7
Citar            
MensajeEscrito el 20 Jun 2008 10:20 am
Cada cual utiliza los métodos que quiera, yo en mi caso no tomaría las medidas del textoCONscoll, si no que tomaría las medidas de maskara y a estas medidas le sumara 10 y 10 por el alto y al ancho y la posicion en las x del fondo que voy a crear, como te decia en el ejemplo anterior, sería la posicion de textoCONscoll más la posición que tiene la mascara dentro de textoCONscoll.

En resumidas cuentas si no existe nada para tomar las propiedades de "lo visual" en action script 3, ya que el lenguage está orientado a objetos, te recomiendo que resuelvas tu problema de la forma que te había explicado.

Saludos

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 20 Jun 2008 11:41 am
Hola de nuevo y gracias por tu interés.

Te quiero volver a matizar que eso es solo un ejemplo, la idea es poder generalizarlo. Realmente el el 'textoCONscoll' podría estar dentro de otro clip, que a su vez podría estar dentro de otro... por lo que calcular la altura y anchura de un clip que contenga el 'textoCONscoll' tendría que hacerse recursivamente, calculando máximos. Esa es la única solución FEA [feísma] que se me ocurre, ya que la natural es usar directamente una variable o propiedad aun mejor. El problema de usar una variable es que no es genérico, ya que tendrías que declararla para cualquier clip, independientemente que contenga o no al textoCONscoll'.

Como de componentes no sé nada, igual por ahí las cosas van mejor. Ciertamente, el lenguaje es un POO, pero eso no quita, como tú mismo has dicho, que se pueda saber de alguna forma (que yo no sepa) cual es el ancho y alto "visual" ['mostrado'] de un clip determinado en AS 3.0.

Un saludo.

Por enWILLYado

30 de clabLevel



Genero:Masculino  

2004

msie7
Citar            
MensajeEscrito el 20 Jun 2008 02:36 pm
Vale, solamente he querido ayudarte, pero con esa actitud dudo que alguien más quiera hacerlo. Solamente te recomiendo para que no te encuentres con estos problemas no metas un clip dentro de otro sucesivamente, recomendado por Adobe para que el flash player funcione más ligero.

Saludos

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 20 Jun 2008 02:45 pm
Muy buenas otra vez.

Aprecio tu ayuda pero solo quería hacer y hacerte ver que con es un problema concreto, si no que es un problema general del Flash. Y que como normalmente estas cosas tienen solución artesanal, pues igual antes a alguien se le ocurrió.

Respecto a lo de no introducir clips, ¿en qué quedamos? Es un POO (objetos - distintos niveles de profundida) o es un POF (funciones - mismo nivel de profundidad). Aunque Adobe y su Flash Player funcionan mejor, creo que es desmesurado pedir a un desarrollador de aplicaciones más o menos grandes (como un espacio con múltiples ventanas, que es donde este problema de tamaños reales y mostrados se acentúa más porque si metes un clip con el famoso 'textoCONscoll' y quieres calcular el tamaño de la ventana que lo encierra no sabes como de forma genérica) que no meta clips dentro de otros.

Y para recalcar, reitero mi agradecimiento por tu tiempo invertido en intentar solucionar esto aportando soluciones que, aunque funcionan, no son las que espero. Y animo al resto de usuarios y usuarias que, si han solucionado esto, puedan aportar sus propuestas aquí.
Hasta pronto.

Por enWILLYado

30 de clabLevel



Genero:Masculino  

2004

msie7

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.