java me gamecanvas
TRANSCRIPT
El paquete javax.microedition.lcdui.G
ame
Clase GameCanvas
GameCanvas
Es una clase abstracta (tendremos que redefinir) qué hereda de Canvas y que tiene un buffer asíncrono y permite recoger el estado de las teclas del móvil.
ofrece la posibilidad de implementar un juego completo, incluyendo toda su funcionalidad, con un simple bucle controlado por un único hilo.
Esto es así ya que permite que los procesos de pintado y gestión de eventos de teclado tengan un nivel de transparencia mayor para el programador.
Por ejemplo, ofrece la posibilidad de crear animaciones rápidas y libres de parpadeo o la posibilidad de examinar el estado de las teclas del dispositivo.
algunas tareas son:
• La posibilidad de acceder directamente al objeto Graphics y de disponer de un buffer específico en el que se podrán representar y tratar las imágenes antes de mostrarlas en la pantalla del dispositivo.
• La técnica de "polling" (encuesta). Permite acceder directamente al estado de las teclas del dispositivo.
OFF-SCREEN BUFFER
Es una representación de la pantalla que no es visible sino que está almacenada en memoria.
El buffer se rellena con pixels en blanco al inicializarlo y sólo el objeto GameCanvas puede modificar su contenido.
Estas modificaciones se ejecutan sobre el contenido del buffer, pero no son visibles hasta que se indica que su contenido se vuelque a la pantalla, es decir, funciona como una "pantalla virtual".
Ejemplos
public class JuegoGameCanvas extends GameCanvas implements Runnable {
public void run() { Graphics g = getGraphics(); while (true) { // Actualizar el estado del juego. int keyState = getKeyStates(); // Responder a la pulsación de teclas, // repintando aquí por ejemplo. flushGraphics(); // Esperamos. } }}
public class JuegoCanvas extends Canvas implements Runnable { public void run(){ while (true) { // Actualizar el estado del juego repaint(); // Esperar } } public void paint(Graphics g) { // Pintar imagenes } protected void keyPressed(int keyCode) { // Codigo de respuesta a la // pulsacion de una tecla }}
Clase Layer
Clase Layer
Es una clase abstracta que representa un elemento visual cualquiera del juego.
Propiedades:
• Posición
• Tamaño
• Posibilidad de hacerla o no visible.
Si consideramos que un juego consiste básicamente en un fondo con una serie de elementos animados, resulta muy cómodo crear este tipo de escenas utilizando "capas"(Layers), desplazándolas y haciéndolas visibles o invisibles de manera independiente.
Métodos en la clase Layer: getHeight()getWidth()getX()getY()isVisible()
Clase LayerManager
nos permite controlar y tratar conjuntamente con una serie de objetos Layer que formen parte de la misma aplicación. La manera de hacerlo es manteniendo una lista ordenada en la que los Layers pueden ser insertados, accedidos o eliminados.
nos permite controlar y tratar conjuntamente con una serie de objetos Layer que formen parte de la misma aplicación. La manera de hacerlo es manteniendo una lista ordenada en la que los Layers pueden ser insertados, accedidos o eliminados.
Layer Manager
Imagen construida con un objeto Layer Manager
TiledLayer
TiledLayer es una clase que hereda de Layer y que representa un elemento visual compuesto por un conjunto de celdas, cada una de las cuales tiene asociada una imagen que denominaremos baldosa (tile).
Image image = Image.createImage("/board.png"); TiledLayer tiledLayer = new TiledLayer(10, 10, image, 16, 16);
Ejemplo:
Sprite
Sprite es otra subclase de Layer y se podría decir que es el concepto dual de TiledLayer. Si antes generábamos a
partir de una imagen varias baldosas, ahora, a partir de varias imágenes (frames) construirmos una única
imagen animada.
Ejemplo:
Sprite sprite = new Sprite( imagen, frameWidth, frameHeight);
Crea el objeto Sprite definiendo un tamaño de frame igual a imagen.getWidth() e imagen.getHeight(), es decir, crea un único frame por lo que el Sprite será no animado.
// Crear un Sprite a partir de una imagen que contiene los frames
sprite = new Sprite(,15,25);
// Declarar cual es la secuencia de frames
int[] sequence = {0,1,2,3};
sprite.setFrameSequence(sequence);
// Determinar el pixel de referencia y su posicion
sprite.defineReferencePixel(refX,refY); sprite.setRefPixelPosition(coordXSprite,coordYSprite);
// Hacer el Sprite visible
sprite.setVisible(true);