Actionscript 3.0: memoria utilizada |
Etiquetas: System totalMemory |
Podemos comprobar cantidad de memoria utilizada por Flash Player mediante la propiedad System.totalMemory, que devuelve el valor en bytes. Por ejemplo, si queremos ver el valor en KBs de la memoria utilizada por nuestra aplicación, pondríamos:
|
Efecto lupa en Actionscript 3.0 |
Etiquetas: BitmapData Bitmap smoothing mask drawCircle |
![]() |
En este ejemplo voy a tratar de explicar como se hace el "Efecto lupa" en Flash, con Actionscript 3.0. Para simplificar voy a explicar la teoria basándome en una imagen que tengo en un MovieClip el escenario. Por supuesto esto se puede modificar para cargar imágenes externamente o como se necesite. Los pasos que tenemos que seguir para crear el "efecto lupa" son estos: -Crear una copia del MovieClip en BitmapData, y ponerla por encima a una escala mayor que el original:
-Poner a la copia una máscara circular, de manera que solo se vea el trozo de imágen tapado por la máscara:
-Añadimos un evento enterframe. Dentro de la función del evento vamos a mover la máscara siguiendo al ratón, y a recolocar la "copia grande":
En la función del evento tenemos que mover la máscara para que siga al ratón, y recolocar la imagen grande para que el trozo que se vé sea el que corresponde a la imagen pequeña. La función es cuestión es esta:
Adjunto fuentes con todos los materiales, por si queda alguna duda. |
ActionScript 3.0: La propiedad mouseChildren |
Etiquetas: mouseChildren |
Una de las trampas que me encontré cunado empecé con Actionscript 3.0 era esta: -Creaba un MovieClip con un campo de texto dinámico dentro (por ejemplo para el botón de un menú). -Le añadía un evento de ratón y ponia su propiedad buttonMode como true. Resultado: no se veía el handCursor (la mano típica al hacer over sobre un botón) cuando ponía el ratón encima. En aquel momento, para solucionar el inconveniente (estaba haciendo unos cambios delante del cliente), puse un botón transparente dentro del MovieClip, por encima del resto de elementos, de tal manera que al hacer over sobre el clip se hacia over sobre el botón y se mostraba el handCursor. Mas tarde, pude investigar un poco, y descubrí que lo que pasaba era que el campo de texto dentro del clip "interfería" con los eventos de ratón, y por eso no se mostraba "la mano". Para solucionarlo, podemos utilizar la propiedad mouseChildren de los DisplayObjectContainer, que determina si los elementos secundarios de un objeto están habilitados para ratón. Su valor predeterminado es true. |
Comprobacion de tipos en Actionscript 3.0 con as e is |
Etiquetas: as is |
En Actionscript 3.0 disponemos de dos operadores para verificar tipos: "as" e "is". Es decir, con estos operadores podemos comprobar, por ejemplo, si un elemento del escenario es de tipo Sprite, o si una variable es de tipo Number. Para ver como funcionan estos dos operadores voy a utilizar un escenario sobre el que tengo 3 MovieClips de la clase "Cuadrado", que extiende de MovieClip, y 3 MovieClips de la clase "Circulo", que también extiende de MovieClip. El operador is Permite comprobar si una variable o expresión forma parte de un tipo de datos. No solo verifica si un objeto es una instancia de la clase especificada, sino también si es una subclase de ella o implementa la misma interfaz. Por ejemplo, si en el escenario que hemos propuesto ponemos:
Obtenemos:
Como vemos, "parpadean" círculos y cuadrados, ya que todos son instancias de clases que heredan de DisplayObject. Sin embargo, si ponemos:
vemos que solamente parpadean los cuadrados, ya que los circulos no pertenecen a la misma clase ni heredan de "Cuadrado". El operador as También permite comprobar si un elemento es miembro de un tipo de datos. Sin embargo, en lugar de devolver true o false, devuelve el valor de la expresión en lugar de true, y null en lugar de false. Por ejemplo:
|
Como crear un menú dinámico con Actionscript 3.0 y XML |
Etiquetas: URLLoader URLRequest currentTarget |
![]() |
Este ejemplo intenta mostrar una forma básica de hacer un menú dinámico con Flash y XML. La misma teoria que se aplica aquí para crear los elementos del menú, se puede aplicar en la creación, por ejemplo, de una galeria de imágenes o videos. La idea es hacer un menú cuyos elementos se crean a partir de los nodos de un XML. De esta forma se hace más sencillo el mantenimiento del menú, ya que por ejemplo para añadir un botón solo habría que añadir un nuevo nodo con los contenidos necesarios. El XML que vamos a utilizar es este:
Vemos que cada elemento tiene un título, que vamos a poner en el texto del botón, y un enlace, que es la url que vamos a cargar al hacer click en el botón. Una vez que tenemos el XML, vamos a flash y creamos el botón que vamos a utilizar para crear el menú. En este caso es un fondo blanco con un campo de texto dinámico llamado "Texto_txt". Una vez creado pulsamos con el botón derecho en el símbolo que tenemos en la biblioteca y seleccionamos "Vinculación". Tenemos que asociar el botón a la clase ElementoMenu, que es el nombre de clase que vamos a utilizar para crear los botones.
Ahora vamos a cargar el XML. Creamos un URLLoader, añadimos los eventos, y creamos las funciones de carga y error. Se puede ver el proceso de carga más detallado en el
En cada "vuelta" del for, vamos a crear un botón, rellenamos su campo Texto_txt con el nodo titulo, y almacenamos en una variable dentro del botón el valos del nodo enlace. Lo colocamos en "y" descendente según avanzamos para que salgan uno debajo de otro, y por último le añadimos un evento click que llama a la función navegar:
Ahora, cada vez que hagamos click en un botón, se ejecutará la función navegar. En esta función recogemos el valor de la variable que hemos almacenado en enlace dentro del botón, por medio de currentTarget:
Espero haberlo explicado de una manera fácil. Para cualquier duda podéis utilizar los comentarios. |
Away3D: Galería esférica |
![]() |
ESPECIFICACIONES Lenguaje: Actionscript 3.0 con Away3D y XML Compatibilidad: Flash Player 9 o superior Peso: 125KB |
Actionscript 3.0: Colisiones a nivel de pixel |
Etiquetas: complexIntersectionRectangle hitTestObject |
La función hitTestObject(obj:DisplayObject) evalúa un objeto para comprobar si choca con el objeto obj. Por ejemplo, si tenemos dos objetos "Item1_mc" e "Item2_mc", podemos comprobar si chocan con:
Esta función, tiene el inconveniente de que comprueba los choques entre los contenedores rectangulares de los objetos. Por ejemplo:
por tanto, sin queremos comprobar las colisiones entre dos objetos no rectangulares, puede devolver valores que aparentemente no son correctos. Aquí tenemos un ejemplo en Flash:
Si queremos utilizar colisiones a nivel de pixel, podemos crear un objeto bitmapData, superponer los dos objetos en el objeto bitmapData con un filtro de color cada uno, y comprobar si hay pixels que tienen el color de la combinación de filtros utilizados. En el blog de
Y si queremos recibir el rectángulo de colisión:
El resultado, sería este:
Los fuentes, y la clase HitTest de tink, tras el salto. |
Problemas al cargar combobox en Actionscript 2.0 |
Esta trampa es una de esas alegrías que nos dá Flash de vez en cuando. La sorpresa se suele producir asi: -Tenemos que hacer una película que luego vamos a cargar en otra película madre. En esta película "hija", utilizamos un combobox de los de Flash. Probamos nuestra película, y obtenemos algo parecido a esto:
-Una vez tenemos el SWF funcionando, probamos a cargarlo en la película madre, y obtenemos esto:
Como se puede ver, el combo está, aparece incluso la primera opción, pero no podemos desplegarlo. La solución: hay que incluir una instancia de combobox en la biblioteca de la película principal. Por suerte, esto sólo ocurre en Actionscript 2.0. En Actionscript 3.0 no hace falta tener el combo en la película principal. |
Comparar pixels de imágenes en Actionscript 3.0 con threshold |
Etiquetas: BitmapData clone threshold |
![]() |
La función threshold permite hacer comparaciones pixel a pixel en una imagen. Por ejemplo, podemos separar todos los pixels mayores de un color de una imagen, y obtener otra imagen con esos pixels. La función threshold tiene 5 parámetros obligatorios (y varios opcionales): threshold(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, operation:String, threshold:uint) -sourceBitmapData: la imagen que vamos a utilizar -sourceRect: rectángulo que define el area de la imagen de origen que vamos a utilizar -destPoint: punto de la imagen de destino que corresponde a la esquina superior izquierda del rectángulo -operation: operación que vamos a utilizar -threshold: valor con el que comparamos cada pixel Por ejemplo, si queremos separar los pixels mayores de 0xFFCCCCCC de los menores en una imagen, podemos utilizar:
El código completo y los fuentes: |
Actionscript 3.0: Mostrar imagen en blanco y negro con ColorMatrixFilter |
Etiquetas: ColorMatrixFilter filters |
![]() |
La clase ColorMatrixFilter de Actionscript 3.0 permite aplicar una transformación a los valores de color y alfa de cada pixel de una imagen. Se puede aplicar sobre cualquier objeto que herede de la clase DisplayObject (es decir MovieClip, SimpleButton, TextField...). Los filtros ColorMatrixFilter, se crean a partir de una matriz de transformación de 4x5, con lo valores de modificación que queremos aplicar a cada canal. Por ejemplo, si tenemos la matriz:
Podemos crear un filtro con ella, asi:
y aplicarlo a un MovieClip (que en este caso está en el escenario con el nombre Imagen2_mc):
De esta manera, hacemos que el contenido de Imagen2_mc aparezca en blanco y negro, pero podemos modificar los valores de bwMatrix para obtener otros efectos. El código completo y los fuentes, son estos: |