banner


Programa Juegos en Applets

GameLib y la clase Game

<< Anterior | Men� | Siguiente >>

Creando la clase Game

Hasta el momento, nos hemos llevado un peque�o tiempo creando las bases de nuestro applet, que necesitaremos para todos nuestros juegos futuros. �Se imaginan tener que crear todo de nuevo cada vez que hagamos un nuevo juego? Adem�s, con el tiempo, habr� ciertas partes del c�digo que no necesitaremos ver ni modificar, como lo relacionado con el hilo del tiempo, y siempre estar�n ahi, ocupando espacio de nuestro applet y confundiendonos al desplazarnos por nuestro applet conforme lo vayamos modificando. Afortunadamente, podemos crear una librer�a que nos permitir� almacenar ciertas clases comunes para todos nuestros juegos. Siendo este un juego muy b�sico, no haremos gran uso aun a esta librer�a, pero veremos en futuros juegos lo importante que ser� esta librer�a. Comencemos a crearla.

Para comenzar vayamos a nuestra carpeta "src". Demos clic con el bot�n derecho y en "nuevo" [new], elijamos "otro" [other]. En categor�a elijamos "otro" [Other] y elijamos "carpeta" [Folder]. Nos pedir� un nombre, eligiremos el estandar "GameLib" (Librer�a de juego). No olvidemos la importancia de la diferencia entre min�sculas y may�sculas.

Una vez que hayamos creado nuestro GameLib, daremos clic derecho y en "nuevo", elijamos "otro". De la categor�a "Java" elijamos "clase de Java" [Java Class]. De nombre le pondremos "Game" y aceptemos. Nos abrir� nuestra nueva clase. Seleccionemos todo, y sustituyamoslo por el siguiente c�digo:

package GameLib;

import java.applet.Applet;
import java.awt.Graphics;

public class Game extends Applet implements Runnable
{
	Thread thd;
	
	public void init()
	{
		
	}
	
	public void start()
	{
		if(thd==null)
		{
			Thread thd=new Thread(this);
			thd.start();
		}
	}

	public void stop()
	{
		if(thd!=null)
		{
			thd.stop();
			thd=null;
		}
	}

	public void run()
	{
		while(true)
		{
			game();
			
			repaint();
				
			try
			{
				Thread.sleep(50);
			}
			catch(InterruptedException e){}	
		}
	}
	
	public void update(Graphics g)
	{
		paint(g);
	}
	
	public void game()
	{
		
	}
}

Como podremos ver, todo lo anterior ya lo vimos, por lo que no necesitaremos explicar mas que algunos detalles: Al principio tiene este c�digo:

package GameLib;

Con esto, empaquetamos nuestra clase como parte del GameLib, para poderle llamar en futuras referencias. Luego, al final tenemos dos nuevas funciones:

	public void update(Graphics g)
	{
		paint(g);
	}
	
	public void game()
	{
		
	}

Update es una funci�n especial que llama a paint. De esta forma nos aseguramos que nuestro juego pueda ser dibujado. La segunda es muy posible que ya hayas visto que es llamada en nuestro run. La creamos para poderla "sobrecargar" desde nuestra clase principal, y poner todo el c�digo de nuestro juego en su interior. Guardemos y cerremos nuestra clase, ya no tendremos que preocuparnos de ella nunca m�s durante el resto de nuestro curso.

Probando la clase Game

"Muy lindo, hemos creado la clase Game", has de decir, �Pero para que sirve exactamente? �C�mo funciona? Descuida, a continuaci�n haremos un peque�o ejemplo que te mostrar� como se usa esta clase especial. Vayamos al applet1, que ser� el que modificaremos para adaptarlo a nuestra nueva clase. Para empezar, ya no necesitaremos importar la clase applet, pues Game ya lo hace por si mismo, por otro lado, necesitaremos importar nuestra nueva librer�a, as� que al comienzo de todo, agregaremos esta librer�a:

import GameLib.Game;

De esta forma llamamos a nuestra clase Game contenida en la GameLib, y as� podremos usarle en nuestro c�digo, Ahora, cambiaremos nuestra clase applet1 para que su extensi�n sea Game en lugar de Applet:

public class applet1 extends Game

Como podremos ver, nuestra clase applet1 ya no se imprementa como corrible, esto es por que nuestra clase Game ya lo hace, y por tanto no hay necesidad de hacerlo ahora. Tambien recordemos que en Game ya tenemos nuestro hilo de tiempo, as� como el start() y el stop(), por lo que ya no los necesitaremos aqu�, y podremos eliminarlos.

Por �ltimo, modificaremos la clase run(), cambiandole el nombre a game(), y quitando lo que ya est� all�, que ser�a el while true, el repaint y el sleep, por lo que deber�a de quedarnos de la siguiente forma:

	public void game()
	{
		// Aqu� va el c�digo de nuestro juego
		x += 2;
		y += 1;
	}

Si lo has hecho todo bien, la clase applet1 debe verse ahora de esta forma:

import GameLib.Game;
import java.awt.Graphics;
import java.awt.Color;

public class applet1 extends Game
{
	// Aqu� se declaran nuestras variables
	int x = 0;
	int y = 0;
	
	public void init()
	{
		// Comienza descarga as�ncrona de recursos pesados
		setBackground(Color.blue);
	}

	public void game()
	{
		// Aqu� va el c�digo de nuestro juego
		x += 2;
		y += 1;
	}
	
	public void paint(Graphics g)
	{
		// Aqu� se dibujan todos los objetos
		g.setColor(Color.yellow);
		g.drawRect(x, y, 20, 10);
	}
}

Como podremos ver, es mucho m�s corto y limpio ahora, mostrandonos solo la informaci�n que en verdad necesitamos ver. Corramos nuestra clase con Shift+F6 para comprobar que ha salido de forma correcta. �Muy buen trabajo!

Limpiando nuestra pantalla

�Un segundo! Nuestro rectangulo se desplaza pero va dejando sus dibujos antes y no se limpia la pantalla �Qu� ha pasado?... No te asustes, lo que pasa en verdad es algo muy sencillo y que no debe preocuparnos. Lo que pasa es que al llamar al paint desde update, olvidamos decirle que se limpiara la pantalla. Pero eso no es nada malo, por el contrario, hasta podremos sacarle ventaja en un futuro. Por ahora, tan solo agreguemos una sencilla l�nea a nuestro c�digo para que se corrija el problema, quedando nuestro paint as�:

	public void paint(Graphics g)
	{
		// Aqu� se dibujan todos los objetos
		g.clearRect(0, 0, this.getWidth(), this.getHeight());
		g.setColor(Color.yellow);
		g.drawRect(x, y, 20, 10);
	}

ClearRect se encarga de limpiar una secci�n de nuestra pantalla con el color de fondo, en nuestro caso, le damos las coordenadas desde 0,0 hasta su ancho y alto, limpiando la pantalla por completo. IMPORTANTE: Recuerden que la limpieza de nuestra pantalla va hasta el principio de nuestro paint, de lo contrario, nada de lo que dibujemos antes se ver� en pantalla.

"�A que me refer�a con que podr�amos sacar ventaja de esto?" Preguntar�n. M�s tarde cuando veamos como dibujar imagenes, podremos sustituir esta l�nea con una imagen de fondo de nuestra preferencia. Si no lo sustituyeramos, ver�amos un molesto parpadeo, que actualmente est� ah�, pero solo se nota mucho cuando se dibujan imagenes muy grandes. De esta forma, nuestra librer�a est� lista y sabemos como usarla, por lo que estamos listos para comenzar a programar juegos.

Regresa al men� principal, y comienza ahora el curso de programaci�n de nuestro primer juego.

<< Anterior | Men� | Siguiente >>

Firmar Libro de Visitas | Ver Libro de Visitas

Αερ - Γεο - �Ίδρο - Φος - Πιρ

Valid XHTML 1.0 Transitional ¡CSS Válido!

daPhyre
Hosted by www.Geocities.ws

1