23
Greenfoot & Kinect Eduardo H. Calvillo Gámez

Greenfoot & Kinect

Embed Size (px)

DESCRIPTION

Introducción a manipular de Kinect usando Greenfoot.

Citation preview

Page 1: Greenfoot & Kinect

Greenfoot & KinectEduardo H. Calvillo Gámez

Page 2: Greenfoot & Kinect

Primeros Pasos

Configurar Greenfoot para que se comunique con Kinect http://www.greenfoot.org/doc/kinect/index.html

Ejecutar kinectserver y dejarlo corriendo mientras se compila y ejecuta el programa

Page 3: Greenfoot & Kinect

Primeros Pasos

Obtener el escenario básico para Kinect Clase KinectWorld – subclase de World Clases

Joint KinectClient Point3D UserData

ZIP en página web del curso

O agregar manualmente cada clase

Page 4: Greenfoot & Kinect

Clases

Revisar API Doble clic sobre clase Cambiar a ver documentación

KinectWorld Métodos para que nuestro mundo pueda interactuar con Kinect

Joint Clase para identificar coyunturas del esqueleto

KinectClient Realiza la interacción entre Kinect y Greenfoot

Point3D Un punto en 3D

UserData Clase que almanacena los datos del usuario frente a la cámara

Page 5: Greenfoot & Kinect

Ejercicio 1Utilizando la cámara

Page 6: Greenfoot & Kinect

Lo Básico

Necesitamos obtener lo que este monitoreando la cámara y desplegarlo en el mundo

Revisando la API de Greenfoot básica, necesitamos una imagen para desplegar en el mundo.

Clase KinectWorld Método getThumbnail()

Page 7: Greenfoot & Kinect

Instrucciones

Crear un escenario nuevo Kinect1

Crear una subclase de Actor que se llame “Foto” Las clases de tipo Actor son los que aparecen e interactúan en el mundo Sin imagen

Cuando la clase actúe Nos traemos la imagen que este captando la cámara

getWorld().getThumbnail() Necesitamos hacer un casting para que el mundo que nos traigamos

reconozca los métodos de la subclase y no de la clase padre ((KinectWorld)getWorld).getThumbnail() Y se lo asignamos a una imagen de tipo GreenfootImage

La asignamos a la clase al Actor

Page 8: Greenfoot & Kinect

Código

public void act()

{

GreenfootImage img = ((KinectWorld)getWorld()).getThumbnail();

setImage(img);

}

Page 9: Greenfoot & Kinect

Instrucciones (2)

No interactuamos directamente con la clase KinectWorld

Creamos una subclase Kinect1World

Sin imagen Creamos un objeto de tipo Foto Agregamos el objeto al centro del mundo

Page 10: Greenfoot & Kinect

Código (2)

public Kinect1World()

{

Foto f = new Foto();

addObject(f,getWidth()/2,getHeight()/2);

}

Page 11: Greenfoot & Kinect

Ejercicio 2Agregando más actores

Page 12: Greenfoot & Kinect

Clase Etiqueta (Label)

Todo lo que aparece en el mundo de greenfoot debe de ser una imagen

El texto lo debemos convertir a una imagen

La clase Etiqueta, que nosotros tenemos que implementar, hace el trabajo Disponible por comunidad

Revisar API de GreenfootImage Constructor

Page 13: Greenfoot & Kinect

Instrucciones

Crear una subclase de Actor Label

Copiar el código que se muestra a continuación Modificar al gusto

Page 14: Greenfoot & Kinect

Código (3)

public Label(String text){

setText(text, 20);

}

public void setText(String text, int size){

setImage(new GreenfootImage( text, size, java.awt.Color.BLACK, new java.awt.Color(0,0,0)));}

Page 15: Greenfoot & Kinect

Instrucciones (4)

En el mundo Kinect1World Agregar un objeto de tipo Etiqueta

Los objetos tienen precedencia en el orden que los ponemos en la pantalla como una Pila El que ponemos primero, se queda atrás.

Page 16: Greenfoot & Kinect

Código (4)

Label l = new Label("Hecho por EHCG");

addObject(l, 100,100);

Page 17: Greenfoot & Kinect

Instrucciones (5)

Crear una nueva subclase de Actor Pingu con la imagen de Tux Su única acción es dar vueltas

Quitar el objeto de tipo Foto del mundo

Implementar el método act() en Kinect1World

La primera línea tiene que ser super.act();

para que se actualice el mundo de Kinect

Page 18: Greenfoot & Kinect

Instrucciones (5.2)

Cambiar el fondo a negro getBackground().setColor(java.awt.Color.BLACK); getBackground().fill();

Agregar objetos de tipo Pingu en posiciones al azar int x // contiene un número al azar del tamaño del

fondo; addObject (new Pingu(), x, 100);

Agregar la silueta del usuario de Kinect getCombinedUserImage();

Page 19: Greenfoot & Kinect

Código (5)

GreenfootImage userImage = getCombinedUserImage();

userImage.scale(getWidth(), getHeight());

getBackground().drawImage(userImage, 0, 0);

Page 20: Greenfoot & Kinect

Instrucciones (6)

Editar Pingu para que se mueva por el mundo

Agregar una propiedad a Pingu, si es 1 esta vivo, si es 0, esta muerto y no se mueve.

En el Mundo Kinect1World Agregar una propiedad privada de tipo imagen,

donde vamos a guardar la imagen que esta detectando el Kinect.

Asignar un método para obtener la imagen

Page 21: Greenfoot & Kinect

Instrucciones (6.2)

Checar si los Pingus chocan con el usuario, si chocan, borrarlos.

El usuario es una imagen, entonces únicamente se checa si tenemos alguna intersección

Y tenemos que checar el alfa del color sea mayor a 0.

Page 22: Greenfoot & Kinect

Código (6)

En act() if (!colision(x,y)){ getWorld().removeObject(this); }

Page 23: Greenfoot & Kinect

Código (6.2)

Kinect1World mundo = (Kinect1World)getWorld();

GreenfootImage imagenUsuario = mundo.getImagenGuardada();

if (imagenUsuario!=null){

if (

ix < imagenUsuario.getWidth() &&

iy < imagenUsuario.getHeight() &&

imagenUsuario.getColorAt(ix, iy).getAlpha() > 0 )