Joystick con códigos FLAR

Los códigos FLAR suelen ser utilizados para detectar mediante una cámara una plantilla FLAR de realidad aumentada y posicionar en un espacio 3D el objeto que queremos representar, pero, en nuestro caso vamos a utilizar estos códigos FLAR para construir un "joystick" que será utilizado con la webcam, y será capaz de detectar las posiciones, izquierda, centro, derecha... y las que se os ocurran.

Este sistema lo hemos utilizado para crear el juego Nancy Studio Dance, donde una muñeca real está sobre una peana, con tres códigos impresos, esta muñeca se sitúa delante de la webcam, y a modo de Guitar Hero, pero utilizando la muñeca, se realizan coreografías. El juego va detectando los códigos que nos interesan y simula una pulsación de teclado.

La librería de FLAR puede ser descargada desde aquí: http://www.libspark.org/wiki/saqoosha/FLARToolKit/download con esto ya tendremos todo lo necesario para empezar a detectar las posiciones del joystick.

Aquí existe un generador de marcadores online: http://sixwish.jp/AR/Marker/idMarker/

De aquí podéis bajaros el proyecto en FlashDevelop con comentarios para entenderlo y aprender a usarlo fácilmente: http://www.enriquedavid.es/downloads/PostFlar.rar

Espero que os resulte de utilidad.

Os dejo aquí la clase principal, recomiendo bajar el proyecto entero y trastearlo:

package

{

import dgFLAR.FLARManager;

import dgFLAR.MarkerData;

import flash.display.Sprite;

import flash.events.Event;

import flash.geom.Point;

import flash.media.Camera;

/**

* ...

* @author Enrique David

*/

public class Main extends Sprite

{

// Este objeto lo utilizaremos para saber si tenemos o no camara

private var camara:Camera = new Camera();

// Este es el Sprite de nuestro personaje

private var personaje:Sprite = new Sprite();

public function Main()

{

// Si la camara es soportada por el cliente

if (Camera.isSupported) {

// Inicializamos el sistema FLAR

FLARManager.init(new Point(640, 480), new Point(320, 240), onActivate, onNewMarker, onDisableCam);

// Si FLAR no tiene camara

if (!FLARManager.hasCamera)

{

trace("No hay camara");

}

// Si la Camara está deshabilitada

else if (camara.muted)

{

trace("Camara no habilitada");

}

// Si hay Camara

else

{

trace("Hay camara");

}

// Si la Camara no esta soportada

} else {

trace("Camara no soportada");

}

}

/**

* Evento lanzado cuando todo el sistema FLAR y la Cámara están listos para ser usados

*/

private final function onActivate():void

{

trace("FLARManager activado");

// Añadimos la captura de la cámara de FLAR a la escena

addChild(FLARManager.Capture);

// Creamos nuestro personaje (un personaje, con carisma, dinámico, unas animaciones brutales y una expresión del rostro sin precedentes)

personaje.graphics.beginFill(0xFF0000, 1);

personaje.graphics.drawRoundRect(0, 0, 24, 24, 8, 8);

personaje.graphics.endFill();

personaje.x = stage.width / 2 - personaje.width / 2;

personaje.y = stage.height / 2 - personaje.height / 2;

// Añadimos nuestro personaje a la escena

addChild(personaje);

// Añadimos un evento ENTER_FRAME para actualizar FLAR

addEventListener(Event.ENTER_FRAME, update);

}

/**

* Evento lanzado cada Frame de la película, lo utilizaremos para actualizar FLAR

*/

private function update(e:Event):void {

// Actualizamos FLAR, al actualizar FLAR, también se actualiza FLARManager.Capture, con el nuevo Bitmap capturado por la cámara

FLARManager.update();

}

/**

* Si no se permite el uso de la Camara se lanza este evento

*/

private function onDisableCam():void

{

trace("Camara deshabilitada");

}

/**

* Al detectar un Marcador se dispara este evento

* @param data La información del Marcador detectado

*/

private final function onNewMarker(data:MarkerData):void

{

// EL ID del marcador, es un número, según el marcador que utilicemos

var ID:int = data.markerId;

trace("Nueva plantalla detectada, código: " + ID);

// Según el Marcador utilizado, hacemos una cosa u otra, como si se tratase de una pulsación de teclado

switch(ID) {

case 383: // Derecha

mueveDerecha();

break;

case 511: // Izquierda

mueveIzquierda();

break;

}

}

/**

* Movemos nuestro personaje a la Derecha

*/

private function mueveDerecha():void {

personaje.x += 1;

}

/**

* Movemos nuestro personaje a la Izquierda

*/

private function mueveIzquierda():void {

personaje.x -= 1;

}

}

}

¿Fué interesante? Por qué no dejas un comentario abajo y continúas la conversación.

Comentarios

No hay comentarios todavía.

Deja un Comentario

(requerido)

(requerido)