Desenvolva seu primeiro jogo utilizando MIDP - J2ME

Aprenda a movimentar uma imagem escutando os eventos do teclado de seu dispositivo móvel.

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() {
whiletrue ) {
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( 00this.getWidth(), this.getHeight() );
g.drawImage( img2, X, Y, Graphics.VCENTER | Graphics.HCENTER );

if( !isDoubleBuffered() ) {
original.drawImage( img1, 00, 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;
}
}
}

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados