1. En el fichero Ej1.java tenemos una aplicación que muestra un mensaje de texto desplazándose hacia la izquierda. Cuando el mensaje se esconde totalmente por el lado izquierdo volverá a aparecer por la derecha. Se pide:
a) Ejecutar la aplicación y observar la animación. ¿Qué problema encontramos? ¿A qué se debe?
b) Solucionar el problema. Introducir los cambios necesarios en el programa para que no se produzca este efecto no deseado.
c) Volver al programa inicial y sustituir el Canvas por un JPanel. Ejecutar la aplicación y observar la animación en este caso. ¿Porqué ocurre esto?
2. En el fichero Ej2.java tenemos una aplicación que muestra un texto por pantalla. Dicho texto deberá cambiar de color cuando pasemos con el ratón por encima de él. Se pide:
a) ¿De dónde podemos obtener la información necesaria para saber si el ratón se encuentra sobre el texto?.
b) Introducir el código necesario para que el texto cambie de color al situarnos con el ratón sobre el texto.
3. Vamos a realizar una sencilla aplicación de dibujo. La aplicación, contenida en Ej3.java, nos permitirá dibujar rectángulos en pantalla al pinchar con el ratón sobre el área de dibujo. Cuando pinchemos se fijará un extremo del rectángulo, y mientras arrastremos el ratón iremos moviendo el otro extremo, hasta que soltemos el botón, momento en el que se fijará dicho extremo y quedará dibujado fijo en pantalla. Se pide:
a) Cargar la aplicación y probar a dibujar varios rectángulos. ¿Qué ocurre? Consultar el código fuente para determinar la causa del problema.
b) El contenido del área de dibujo puede perderse en determinados momentos (por ejemplo cuando minimizamos la ventana), por lo que deberemos ser capaces de reconstruir todo el dibujo. Esto nos obliga o bien a guardar información sobre todas la figuras dibujadas, para poder volverlas a redibujar, o a dibujar en un área en memoria que podemos volcar a pantalla en cualquier momento, tal como hacemos en el ejemplo. ¿Qué ventajas e inconvenientes tiene cada método? ¿Cómo evitarías el problema que tiene nuestra aplicación con cada uno de ellos?
c) Evitaremos el problema de que las figuras dejen rastro mientras las dibujamos de una forma eficiente. Utilizaremos para ello el modo de dibujo XOR. Añadir las líneas de código para utilizar este modo (utilizaremos color blanco para el XOR) dentro de la función que realiza el dibujado del rectángulo en cada momento (función dibuja), en el lugar indicado mediante comentarios. Ejecutar el programa para comprobar que funciona correctamente. Consultar el resto del código para estudiar como utilizamos el modo XOR. Explica cómo evitamos que las figuras dejen rastro. ¿Qué ventajas tiene este método?
4. Juego PANJ! Descargar el juego desde la página de la sesión (sección recursos). Se trata de una aplicación completa basada totalmente en gráficos 2D a pantalla completa. Descomprimir en un directorio, y ejecutar mediante
java Panj
A continuación deberemos elegir el modo gráfico. Será suficiente un modo 320x240 y 16bpp. Una vez hecho esto veremos la pantalla de título. Los controles son:
Izquierda: Cursor izquierdo
Derecha: Curso derecha
Fuego: Barra de espacio
Salir: ESC
Con esto ya podremos empezar a jugar. Una vez hayas acabado, puedes realizar de forma optativa los siguientes apartados:
a) Consultar el código fuente del juego, empezando por la clase principal Panj.java. ¿Donde se implementa el modo a pantalla completa? Modificar el código para que se vea en forma de ventana.
b) Volver a la versión inicial a pantalla completa. Implementar render activo.
c) Utilizar como técnica de doble buffer el intercambio de páginas (flipping).
d) Introducir cualquier cambio y mejora que se te ocurra en el juego.