2. 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
3. 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
4. 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
6. 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()
7. 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
9. 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
12. 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
13. Instrucciones
Crear una subclase de Actor
Label
Copiar el código que se muestra a continuación
Modificar al gusto
14. 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)));
}
15. 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.
16. Código (4)
Label l = new Label("Hecho por EHCG");
addObject(l, 100,100);
17. 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
18. 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();
20. 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
21. 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.
22. Código (6)
En act()
if (!colision(x,y)){
getWorld().removeObject(this);
}
23. 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 )