Mostrando entradas con la etiqueta AIR Flash Bitmap clipboard. Mostrar todas las entradas
Mostrando entradas con la etiqueta AIR Flash Bitmap clipboard. Mostrar todas las entradas

lunes, 10 de marzo de 2014

Dibujar una nave sencilla con el API (AS 3.0)

Autor: Francisco Arce
Correo: fj_arce@yahoo.com.mx


Cuando hacemos juegos con ActionScript 3.0, es muy útil dibujar una nave sencilla con el API de dibujo, pues no necesitamos cargar ninguna imagen y resulta extremadamente ligera. A continuación mostramos en código de una clase llamad Nave que realiza este dibujo:

package {
   import flash.display.Sprite;

   public class Nave extends Sprite {
      public function Nave() {
         init(false);
      }
      public function init(llama:Boolean):void {
         graphics.clear();
         graphics.lineStyle(1,0);
         graphics.moveTo(10,0);
         graphics.lineTo(-10,10);
         graphics.lineTo(-5,0);
         graphics.lineTo(-10,-10);
         graphics.lineTo(10,0);

         if (llama) {
            graphics.moveTo(-7.5,-5);
            graphics.lineTo(-15,0);
            graphics.lineTo(-7.5,5);
         }
      }
   }
}   

http://www.pacoarce.com
         

viernes, 28 de febrero de 2014

ActionScript 3.0: Cambio color

Una aplicación clásica en los desarrollos educativos es que el usuario (por lo general un niño) iluminen un dibujo. Hay muchas maneras de hacerlo. Una forma de solucionar este problema es tener el dibujo dvidido en diferentes movie clips blancos y un gráfico con los contornos del dibujo.

Es importante nombrar a cada uno de los clips con nombres diferentes. Por lo general necesitamos hacer "grupos" de varios pedazos del dibujo, por ejemplo las manos, el cuello y la cara van del mismo color. También necesitaremos botoncitos que representen los diferentes botones para que el usuario seleccione el color. Por lo general utilizamos un cursor personalizado, ya sea un pincel o una brocha.

Para poder cambiar el movie clip, necesitamos un objeto intermedio donde almacenaremos el color, en este caso necesitamos un objeto ColorTransform. Dicha clase se encuentra en el paquete geom, y este a su ves en el paquete flash. Recuerda que si codificas en la línea de tiempo, no es necesario importar las clases del paquete flash, pero si trabajas en clases, tienes que importarla:

import flash.geom.ColorTransform;

Así que crea un objeto de tranformación de color, donde almacenaremos el color que haya seleccionado el usuario:

var colorInfo:ColorTransform;

Aqui almacenamos el color (en formato hexadecimal, de preferencia). Supongamos que desamos cambiar el color a amarillo:

colorInfo = new ColorTransform();
colorInfo.color = 0xffff00;

Ahora aplicamos este cambio al movie clip (digamos que se llama dibujo) con la siguiente asignación:

dibujo.transform.colorTransform = colorInfo;

Listo, el movie clip cambiará de color. Hay que remarcar que si el movie clip tiene un degradado o diferentes colores que los aplicamos en tiempo de autor ed decir, con el EDI, los colores se remplazarán por el color que aplicamos.

http://www.pacoarce.com

jueves, 16 de enero de 2014


Tipo de columnas MySQL

Como ya se había dicho, una tabla es un conjunto de uno o más columnas. Cuando se crea una tabla con la sentencia CREATE TABLE, se especifica el tipo deseado para cada columna. Un TIPO DE COLUMNA es más específico que un TIPO DE DATO. El tipo de dato es una categoría general como "número"o "cadena". A un tipo de cadena le caracteriza precisamente la clase de valores que puede contener, como SMALLINT o VARCHAR(32).

            Los tipos de columna MySQL son los responsables de describir qué clase de valores quiere que contenga una columna, lo que determina a su vez la manera en que MySQL tratará dichos valores. Cada tipo de columna tiene varias características:

·                Qué clase de valores quiere almacenar.
·                Cuánto espacio ocupan los valores, si son de longitud fija o de longitud variable.
·                Cómo se clasifican o comparan los valores del tipo.
·                Si el tipo permite o no valores NULL
·                Si el tipo se puede indexar o no

Comprender los tipos de columna es muy importante para reducir el tamaño de la base de datos y aumentar su velocidad de los procesos.

MySQL proporciona tipos de columna para todas las categorías de valores de datos en general, excepto para el valor NULL.

Tipo de columna entera

Para números enteros (que no tienen parte fraccional), como 43, -1, 3, 0 o -789345, los formatos que MySQL puede manejar son:

Nombre del tipo            Significado                        Rango

TINYINT                        Entera muy pequeña            Con signo -128 a 127
                                    Requiere 1 byte                        Sin signo 0 a 255

SMALLINT                        Entera pequeña                        Con signo -32768 a 32767
                                    Requiere 2 bytes            Sin signo 0 a 65535

MEDIUNMINT                        Entera mediana                        Con signo -8388608 a 8388607
                                    Requiere 3 bytes            Sin signo 0 a 1677215

INT                                    Entera estándar                        Con signo -2147683648 a 2147483647
                                    Requiere 4 bytes            Sin signo 0 a 4,294,967,295

BIGINT                                    Entero muy grande            Con signo -9223372036854775808 a
                                    Requiere 8 bytes                            9223372036854775807
                                                                        Sin signo 0 a 18,446,744,073,709,551,615


Observe que el rango de los cinco tipos de enteros depende de si tiene o no signo (UNSIGNED), que es uno de los atributos. Un ATRIBUTO es una característica adicional a la columna. Para seleccionar algún tipo de columna necesitamos analizar el rango de nuestra información y seleccionar el tipo más pequeño que satisfaga ese rango, de lo contrario estaremos desperdiciando recursos de nuestra base de datos.

Por ejemplo, si tenemos un campo que almacenará la edad de una persona (entre 0 y 120 años) nos funciona perfectamente la columna tipo TINYINT. Si se utilizara para este campo un tipo de columna como INT (con 4 bytes), en realidad está desperdiciando 3 bytes. Si su base de datos es grande, por ejemplo, la población de un municipio con 100,000 habitantes, usted está desperdiciando en un solo campo 300,000 bytes.

Si usted intenta almacenar un campo mayor al rango del tipo de columna, el proceso marcará un error y solo cargará hasta el rango máximo, por ejemplo: Tiene un campo tipo TINYINT con signo, y almacena un valor como 500, solo se almacenará 127.

http://www.pacoarce.com
 

martes, 26 de noviembre de 2013

Manejar la cámara de video con Adobe-AIR

Una tarea que podemos manejar con facilidad en Adobe-AIR y actionscript 3.0,  es abrir la cámara de video de la computadora (o la cámara conectada a la computador). Primero necesitamos importar las clases:

import flash.media.Microphone;
import flash.media.Camera;
import flash.media.Video;
import flash.display.Bitmap;
import flash.display.BitmapData;

Luego iniciar los objetos necesarios:

//Video
//
var mic:Microphone;
var cam:Camera;
var vid:Video;
var bmp:Bitmap;
//

Inicia los objetos:

mic = Microphone.getMicrophone();
cam = Camera.getCamera();
if(cam == null){
win.tomarFoto_btn.alpha = .5
win.tomarFoto_btn.enabled = false;
} else {
vid = new Video(150, 200);
vid.x = 0;
vid.y = 0;
vid.attachCamera(cam);
win.camara_mc.addChild(vid);
}

Y tendrás un recuadro con el video de tu cámara en el escenario.

martes, 13 de septiembre de 2011

Cómo leer el portapapeles de la computadora y grabarlo en un archivo con AIR

En muchas aplicaciones de escritorio nos sería de utilidad leer el portapapeles de la computadora para transmitir información (texto o imágenes) de otras aplicaciones. Para ello hay que importar las clases relacionadas, como son:

    import flash.desktop.Clipboard;
    import flash.desktop.ClipboardFormats;
    import flash.desktop.NativeDragManager;
    import flash.desktop.ClipboardTransferMode;
    import flash.events.NativeDragEvent;

Supongamos que desea grabar la informacion del clipboard en un archivo. Podría servirle una función como la siguiente:

            if(Clipboard.generalClipboard.getData( ClipboardFormats.BITMAP_FORMAT)!=null){
                var bm:Bitmap = new Bitmap(Clipboard.generalClipboard.getData( ClipboardFormats.BITMAP_FORMAT) as BitmapData)
                var f:File = new File("salida.jpg");
                var fs:FileStream = new FileStream();
                var jpgEncoder:JPGEncoder=new JPGEncoder(100);
                var jpgStream:ByteArray=jpgEncoder.encode(bm.bitmapData);
                try {
                    fs.open(f,FileMode.WRITE);
                    fs.writeBytes(jpgStream);
                    fs.close();
                } catch (e:Error) {
                    trace(e.message);
                }
            }

Hay que importar las clases para el manejo de archivos y de imágenes, como son:


    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import com.adobe.images.JPGEncoder;
    import flash.utils.ByteArray;
    import flash.filesystem.FileStream;
    import flash.filesystem.FileMode;