Artigos
Java
Desenvolva seu primeiro jogo utilizando MIDP - J2ME
Desenvolva seu primeiro jogo utilizando MIDP
Provavelmente, quando se desenvolve um jogo, uma das coisas mais importantes é a interface desse jogo. Para isso, o pacote javax.microedition.lcdui facilita bastante o desenvolvimento de muitos desenhos na tela do dispositivo. Canvas,Graphics e Image são as classes principais utilizadas para desenvolvimento de gráficos.
Abaixo está um exemplo básico de um jogo que cria e desenha uma imagem, e permite que esta imagem seja movimentada com os eventos do teclado do dispositivo.
import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import java.util.*;
public class GameMidlet extends MIDlet { public GameMidlet() { } protected void startApp() throws MIDletStateChangeException { Display display = Display.getDisplay( this ); display.setCurrent( new GameMidletScreen() ); } protected void destroyApp( boolean unconditional ) throws MIDletStateChangeException { } protected void pauseApp(){} class GameMidletScreen extends Canvas implements Runnable { Random generator; Graphics g1; Image img1; Image img2; int X; int Y; int Direction; public GameMidletScreen() { loadImages(); X = getWidth()/2; Y = getHeight()/2; new Thread( this ).start(); } public void loadImages() { try { if( !isDoubleBuffered() ) { img1 = Image.createImage( getWidth(), getHeight() ); g1 = img1.getGraphics(); } img2 = Image.createImage("/game.png"); } catch( Exception e ) { e.printStackTrace(); } } public void run() { while( true ) { int loopDelay = 1000 / 10; long loopStartTime = System.currentTimeMillis(); doSomething(); long loopEndTime = System.currentTimeMillis(); int loopTime = (int)(loopEndTime - loopStartTime); if( loopTime < loopDelay ) { try { Thread.sleep( loopDelay - loopTime ); } catch( Exception e ){} } } } public void doSomething() { int ImageSpeed = 4; switch( Direction ) { case LEFT: X-=ImageSpeed; break; case RIGHT: X+=ImageSpeed; break; case UP: Y-=ImageSpeed; break; case DOWN: Y+=ImageSpeed; break; } repaint(); serviceRepaints(); } protected void paint( Graphics g ) { Graphics original = g; if( !isDoubleBuffered() ) { g = g1; } g.fillRect( 0, 0, this.getWidth(), this.getHeight() ); g.drawImage( img2, X, Y, Graphics.VCENTER | Graphics.HCENTER ); if( !isDoubleBuffered() ) { original.drawImage( img1, 0, 0, Graphics.TOP | Graphics.LEFT ); } } protected void keyPressed( int keyCode ) { int gameAction = getGameAction( keyCode ); switch( gameAction ) { case LEFT: //Move imagem para esquerda Direction = LEFT; break; case RIGHT: //Move imagem para direita Direction = RIGHT; break; case UP: //Move imagem para cima Direction = UP; break; case DOWN: //Move imagem para baixo Direction = DOWN; break; } } protected void keyReleased( int keyCode ) { Direction = 0; } } } |