Greenfoot & Kinect

1,938 views

Published on

Introducción a manipular de Kinect usando Greenfoot.

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,938
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
15
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Greenfoot & Kinect

  1. 1. Greenfoot & KinectEduardo H. Calvillo Gámez
  2. 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. 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. 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
  5. 5. Ejercicio 1Utilizando la cámara
  6. 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. 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
  8. 8. Códigopublic void act(){ GreenfootImage img = ((KinectWorld)getWorld()).getThumbnail(); setImage(img); }
  9. 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
  10. 10. Código (2)public Kinect1World() { Foto f = new Foto(); addObject(f,getWidth()/2,getHeight()/2); }
  11. 11. Ejercicio 2Agregando más actores
  12. 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. 13. Instrucciones Crear una subclase de Actor  Label Copiar el código que se muestra a continuación  Modificar al gusto
  14. 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. 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. 16. Código (4)Label l = new Label("Hecho por EHCG");addObject(l, 100,100);
  17. 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. 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();
  19. 19. Código (5)GreenfootImage userImage = getCombinedUserImage(); userImage.scale(getWidth(), getHeight()); getBackground().drawImage(userImage, 0, 0);
  20. 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. 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. 22. Código (6) En act()  if (!colision(x,y)){  getWorld().removeObject(this);  }
  23. 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 )

×