DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Desenvolva seu primeiro jogo utilizando MIDP - J2ME

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

[fechar]

Você não gostou da qualidade deste conteúdo?

(opcional) Você gostaria de comentar o que não lhe agradou?

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;
        }
    }
}


Eduardo Oliveira Spinola
Eduardo Oliveira Spínola (eduspinola@gmail.com - http://eduspinola.googlepages.com/home) é Bacharel em Ciência da Computação pela Universidade Salvador - UNIFACS, em 2005. Atualmente fazendo o Mestrado em Engenharia de Software pela Universidade Salvador - Unifacs. Tendo como experiência: desenvolvi...
O que você achou deste post?

    3 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Ricci
Bom exemplo, mas naum eh digno de ser chamado de artigo, pois foi apresentado apenas um source code, sem explicação de o que cada função faz, como o programa se interage..
[há +1 ano] - Responder

 

Emerson
Pessoal tudo bem gostei da aplicação inclusive estou estudando ela, infelizmente não consegui entender algumas coisas alguém poderia por gentileza comentar toda ela e enviar no meu e-mail -> pinducarvalho@hotmail.com sou iniciante em j2me estou gostando porém tenho algumas dificuldades fico agradecido abraço...
[há +1 ano] - Responder
 

Dyego Souza Do Carmo
Emerson,

Você poderia comentar as suas duvidas aqui ? Poderíamos esclarecer para voce e ajudar a todos :)
[há +1 ano] - Responder
 
Cursos relacionados
Publicidade
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03