SlideShare uma empresa Scribd logo
Introdução ao Desenvolvimento de Jogos
       2D/3D em Java ME (Parte 1)




           Daniel Valente de Macedo
                  7° Semestre
Por que Java ME?

   Portabilidade, pois ja é suportado pela maioria
    dos dispositivos móveis disponíveis no
    mercado.
   Curva de aprendizagem pequena.
   Possui ótimas ferramentas de desenvolvimento
    como o Eclipse e o Netbeans.
   Comunidade ativa e participativa (forums,
    blogs, etc).
Plataforma Java ME
Ciclo de Vida do MIDlet


             Start




                         startApp()

            Paused       pauseApp()     Active



          destroyApp()                destroyApp()


                         Destroyed
Desenvolvemendo Jogos com
MIDP/CLDC 1.0

   Não possui suporte a ponto flutuante (CLDC
    1.0), dificultando o desenvolvimento de jogos
    3D.
   Precário suporte a som, somente a beeps.
   Não possui suporte a transparência.
   Não é possivel tratar múltiplas teclas
    pressionadas ao mesmo tempo.
Desenvolvemendo Jogos com
MIDP/CLDC 1.0 (Cont.)
       Exemplo:
public class MeuJogo extends Canvas implements Runnable {

    public void run() {
                                                Não é possivel
        while(true) {                            ter o controle
            repaint();                         de quando que o
                                                  paint() será
        }                                          chamado.
    }

    public void paint(Graphics g) {                     Também não é
        // Código de desenho
                                                         possivel saber
                                                    quando o keyPressed() é
    }                                              chamado, podendo ocorrer
                                                     um atraso na resposta,
    protected void keyPressed(int keyCode) {
                                                      resultando em algo
        // Tratamento de teclas                            indesejado.
    }

}
Desenvolvemendo Jogos com
MIDP/CLDC 1.0 (Cont.)

   Sem o suporte a double buffering, o "pisca-
    pisca" é constante.
     Double Buffering:


                Lógica de   Imagem na     Tela do
     Passo 1:   desenho      memória    dispositivo




                Lógica de   Imagem na     Tela do
     Passo 2:
                desenho      memória    dispositivo
Desenvolvemendo Jogos com a Game
API

   Disponível no MIDP 2.0
   Possui um conjunto de classes bem otimizadas
    voltadas ao desenvolvimento de jogos.
   Possui suporte a ponto flutuante (CLDC 1.1)
   Suporte completo a som (mp3, wav, etc).
   Possui suporte a transpareência.
   É possível tratar múltiplas teclas pressionadas
    ao mesmo tempo.
Classes da Game API
Game API: GameCanvas

   Possui double buffering implementado.
   É possível atualizar a tela no momento
    desejado, onde todos componentes visuais já
    foram atualizados.
   É possível detectar várias teclas pressionadas
    ao mesmo tempo, diferentemente do Canvas.
Game API: GameCanvas

       Exemplo:
public class MeuJogo extends GameCanvas implements Runnable {
  public void run() {
    Graphics g = getGraphics();
    while(true) {                                   Verificação de teclas

            int keyState = getKeyStates();

            if((keyState & UP_PRESSED) != 0) {
               // Tecla UP está pressionada
            }                                           Lógica de desenho
            else if((keyState & DOWN_PRESSED) != 0) {
               // Tecla DOWN está pressionada
            }

            render(g); // Logica de desenho               Desenha a imagem do
                                                             buffer na tela do
            flushGraphics(); //Atualiza tela                    dispositivo
        }
    }
}
Game API: Layer

   Classe abstrata que representa qualquer
    elemento visual na Game API.
   Possui metodos como:
       boolean isVisible()
       void setVisible(boolean visible)
       void move(int dx, int dy)
       voi setPosition(int x, int y)
       abstract void paint(Graphics g)
Game API: Sprite

   Classe que representa uma imagem no jogo,
    por exemplo: Personagem e o Inimigo.
   Possui suporte a frames e animação.
   Possui detecção de colisão por caixa e pixel-a-
    pixel.
   Suporta algumas transformações sobre a
    imagem (Espelhamento, 90°, 180°, 270°...).
Game API: Sprite

   Frames e animação:
                   Divisão interna
    Arquivo .png
                      no Sprite
Game API: Sprite

    Transformações:




                               macaco.setTransform(Sprite.TRANS_ROT90)




macaco.setTransform(Sprite.TRANS_NONE)
Game API: TiledLayer

   Classe que normalmente é usada para
    representações de mapas, utilizando uma
    matriz bidimensional com índices de imagens.
   Possui suporte a tiles animadas (efeito de água
    se movimentando e etc).
Game API: TiledLayer
Game API: LayerManager

   Classe responsável por gerenciar todos os
    Layers.
       Sprite
       TiledLayer
Game Loop
Game Loop (cont.)
public class MeuJogo extends GameCanvas        public void run() {
implements Runnable {
                                                   Graphics g = getGraphics();
 private boolean running;
                                                   while (running) {
 private int delay = 30;
                                                       checkInput();
 public SimpleGameCanvas() {
                                                       update();
     super(true);
                                                       render(g);
 }
                                                       flushGraphics();
 public void start() {
                                                       try { Thread.sleep(delay); }
     running = true;
                                                       catch (InterruptedException ie) { stop(); }
     Thread t = new Thread(this);
                                                   }
     t.start();
                                               }
 }
                                               private void update() {}
 public void stop() { running = false; }
                                               private void checkInput() {}

                                               private void render(Graphics g) {}

                                           }
FIM




      Perguntas ou Dùvidas?
Contato



                 Obrigado!

     danielvalentemacedo@gmail.com

          http://danielvalente.com.br

Mais conteúdo relacionado

Mais procurados (12)

PDF
Guia xna
Sérgio Barbosa
 
ODP
Do zero ao jogo multiplataforma com cocos2d
Vitor Mattos
 
KEY
Desenvolvimento iOS
André Espeiorin
 
PPTX
Advanced topics for game developers
juliocoopergames
 
PDF
Desenvolvimento de Jogos em Java
Bruno Croci
 
PDF
Introdução ao Desenvolvimento de Jogos
Gabriel Giordano Medina
 
ODP
Robot Lego programado em Java
Joao Alves
 
PDF
Visualg primeira interação
Humberto Cepep
 
DOC
Apostila De Visualg
ecompo
 
PDF
Manual gimp
Susana Cascais
 
PDF
Lógica de programação com visu alg
Leandro Santos
 
Guia xna
Sérgio Barbosa
 
Do zero ao jogo multiplataforma com cocos2d
Vitor Mattos
 
Desenvolvimento iOS
André Espeiorin
 
Advanced topics for game developers
juliocoopergames
 
Desenvolvimento de Jogos em Java
Bruno Croci
 
Introdução ao Desenvolvimento de Jogos
Gabriel Giordano Medina
 
Robot Lego programado em Java
Joao Alves
 
Visualg primeira interação
Humberto Cepep
 
Apostila De Visualg
ecompo
 
Manual gimp
Susana Cascais
 
Lógica de programação com visu alg
Leandro Santos
 

Destaque (7)

PDF
Devoxx 2008 at CCT Jan/2009
Daniel De Macedo
 
PDF
LWUIT: Uma alternativa para interface gráfica em dispositivos móveis
Daniel De Macedo
 
PDF
Introdução a game api do java me
Erisvaldo Junior
 
PDF
Blender 3 D
Daniel De Macedo
 
PDF
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
Barry Feldman
 
PDF
Study: The Future of VR, AR and Self-Driving Cars
LinkedIn
 
PDF
Hype vs. Reality: The AI Explainer
Luminary Labs
 
Devoxx 2008 at CCT Jan/2009
Daniel De Macedo
 
LWUIT: Uma alternativa para interface gráfica em dispositivos móveis
Daniel De Macedo
 
Introdução a game api do java me
Erisvaldo Junior
 
Blender 3 D
Daniel De Macedo
 
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
Barry Feldman
 
Study: The Future of VR, AR and Self-Driving Cars
LinkedIn
 
Hype vs. Reality: The AI Explainer
Luminary Labs
 
Anúncio

Semelhante a Java ME - Game API (20)

PDF
JavaME
Elenilson Vieira
 
ODP
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
Eloi Júnior
 
PDF
JavaME - Aula 2
Elenilson Vieira
 
PDF
Desenvolvimento de jogos para android com andengine
Diego Lopes
 
PPSX
Júlio Pescuite - Advanced Topics for Game Developers
iMasters
 
PDF
Jogo para dispositivos móveis
Cristiano Agosti
 
PPT
Usando JavaFx No Desenvolvimento De Jogos
Hamilton Lima
 
PPTX
Desenvolvimento de Jogos com Corona SDK
Bruno Cicanci
 
PPTX
Oficina Android - Games com AndEngine - Dia 3
Odair Bonin Borges
 
PDF
Processo de desenvolvimento de Jogos.pdf
Jean Marie Jhon
 
PPTX
Oficina Android - Games com AndEngine - Dia 2
Odair Bonin Borges
 
PDF
Game API – Java ME Série 40
Microsoft Mobile Developer
 
PDF
Introdução a Programação de Dispositivos Móveis
igorpimentel
 
PPT
Aplicacoes gráficas em Java
Marco Reis
 
PDF
Apostila JavaME
Elenilson Vieira
 
PDF
Marlon Luz - Desenvolvendo games para Nokia Ssha
INdT
 
PDF
Interface grafica
Ialis Cavalcante
 
PPTX
Oficina Android - Games com AndEngine - Dia 1
Odair Bonin Borges
 
PDF
Programação e Estruturas de Dados - Lic. Design e Multimédia
amilcardoso
 
PDF
JavaME - Aula 1
Elenilson Vieira
 
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
Eloi Júnior
 
JavaME - Aula 2
Elenilson Vieira
 
Desenvolvimento de jogos para android com andengine
Diego Lopes
 
Júlio Pescuite - Advanced Topics for Game Developers
iMasters
 
Jogo para dispositivos móveis
Cristiano Agosti
 
Usando JavaFx No Desenvolvimento De Jogos
Hamilton Lima
 
Desenvolvimento de Jogos com Corona SDK
Bruno Cicanci
 
Oficina Android - Games com AndEngine - Dia 3
Odair Bonin Borges
 
Processo de desenvolvimento de Jogos.pdf
Jean Marie Jhon
 
Oficina Android - Games com AndEngine - Dia 2
Odair Bonin Borges
 
Game API – Java ME Série 40
Microsoft Mobile Developer
 
Introdução a Programação de Dispositivos Móveis
igorpimentel
 
Aplicacoes gráficas em Java
Marco Reis
 
Apostila JavaME
Elenilson Vieira
 
Marlon Luz - Desenvolvendo games para Nokia Ssha
INdT
 
Interface grafica
Ialis Cavalcante
 
Oficina Android - Games com AndEngine - Dia 1
Odair Bonin Borges
 
Programação e Estruturas de Dados - Lic. Design e Multimédia
amilcardoso
 
JavaME - Aula 1
Elenilson Vieira
 
Anúncio

Último (9)

PDF
Apresentação de Manipulação de strings em Python .pdf
Gabriel Vitor
 
PDF
SENAC Modelagem de Dados - Aula01 do curso de ADSpdf
JhonataLamim1
 
PPTX
NR-13.pptx treinamento sobre a norma regulamentadora
SimoniBorges1
 
PDF
IA - Grupo J.pdf para trabalho de inteligencia artificial
juanaraujo139815
 
PDF
11 Roberto.pdf astronomia e astronautica
henzoa798
 
PDF
Zeebo: Uma brevíssima introdução. - David Glotz
BluePanther6
 
PDF
Assistente de Suporte e Manutenção de Computadores.pdf
EudesAlvesPessoa
 
PDF
Apresentação sobre Funções Matemáticas e o módulo.pdf
Gabriel Vitor
 
PDF
SENAC Modelagem de Dados - Aula02 curso de ADS.pdf
JhonataLamim1
 
Apresentação de Manipulação de strings em Python .pdf
Gabriel Vitor
 
SENAC Modelagem de Dados - Aula01 do curso de ADSpdf
JhonataLamim1
 
NR-13.pptx treinamento sobre a norma regulamentadora
SimoniBorges1
 
IA - Grupo J.pdf para trabalho de inteligencia artificial
juanaraujo139815
 
11 Roberto.pdf astronomia e astronautica
henzoa798
 
Zeebo: Uma brevíssima introdução. - David Glotz
BluePanther6
 
Assistente de Suporte e Manutenção de Computadores.pdf
EudesAlvesPessoa
 
Apresentação sobre Funções Matemáticas e o módulo.pdf
Gabriel Vitor
 
SENAC Modelagem de Dados - Aula02 curso de ADS.pdf
JhonataLamim1
 

Java ME - Game API

  • 1. Introdução ao Desenvolvimento de Jogos 2D/3D em Java ME (Parte 1) Daniel Valente de Macedo 7° Semestre
  • 2. Por que Java ME?  Portabilidade, pois ja é suportado pela maioria dos dispositivos móveis disponíveis no mercado.  Curva de aprendizagem pequena.  Possui ótimas ferramentas de desenvolvimento como o Eclipse e o Netbeans.  Comunidade ativa e participativa (forums, blogs, etc).
  • 4. Ciclo de Vida do MIDlet Start startApp() Paused pauseApp() Active destroyApp() destroyApp() Destroyed
  • 5. Desenvolvemendo Jogos com MIDP/CLDC 1.0  Não possui suporte a ponto flutuante (CLDC 1.0), dificultando o desenvolvimento de jogos 3D.  Precário suporte a som, somente a beeps.  Não possui suporte a transparência.  Não é possivel tratar múltiplas teclas pressionadas ao mesmo tempo.
  • 6. Desenvolvemendo Jogos com MIDP/CLDC 1.0 (Cont.)  Exemplo: public class MeuJogo extends Canvas implements Runnable { public void run() { Não é possivel while(true) { ter o controle repaint(); de quando que o paint() será } chamado. } public void paint(Graphics g) { Também não é // Código de desenho possivel saber quando o keyPressed() é } chamado, podendo ocorrer um atraso na resposta, protected void keyPressed(int keyCode) { resultando em algo // Tratamento de teclas indesejado. } }
  • 7. Desenvolvemendo Jogos com MIDP/CLDC 1.0 (Cont.)  Sem o suporte a double buffering, o "pisca- pisca" é constante. Double Buffering: Lógica de Imagem na Tela do Passo 1: desenho memória dispositivo Lógica de Imagem na Tela do Passo 2: desenho memória dispositivo
  • 8. Desenvolvemendo Jogos com a Game API  Disponível no MIDP 2.0  Possui um conjunto de classes bem otimizadas voltadas ao desenvolvimento de jogos.  Possui suporte a ponto flutuante (CLDC 1.1)  Suporte completo a som (mp3, wav, etc).  Possui suporte a transpareência.  É possível tratar múltiplas teclas pressionadas ao mesmo tempo.
  • 10. Game API: GameCanvas  Possui double buffering implementado.  É possível atualizar a tela no momento desejado, onde todos componentes visuais já foram atualizados.  É possível detectar várias teclas pressionadas ao mesmo tempo, diferentemente do Canvas.
  • 11. Game API: GameCanvas  Exemplo: public class MeuJogo extends GameCanvas implements Runnable { public void run() { Graphics g = getGraphics(); while(true) { Verificação de teclas int keyState = getKeyStates(); if((keyState & UP_PRESSED) != 0) { // Tecla UP está pressionada } Lógica de desenho else if((keyState & DOWN_PRESSED) != 0) { // Tecla DOWN está pressionada } render(g); // Logica de desenho Desenha a imagem do buffer na tela do flushGraphics(); //Atualiza tela dispositivo } } }
  • 12. Game API: Layer  Classe abstrata que representa qualquer elemento visual na Game API.  Possui metodos como:  boolean isVisible()  void setVisible(boolean visible)  void move(int dx, int dy)  voi setPosition(int x, int y)  abstract void paint(Graphics g)
  • 13. Game API: Sprite  Classe que representa uma imagem no jogo, por exemplo: Personagem e o Inimigo.  Possui suporte a frames e animação.  Possui detecção de colisão por caixa e pixel-a- pixel.  Suporta algumas transformações sobre a imagem (Espelhamento, 90°, 180°, 270°...).
  • 14. Game API: Sprite  Frames e animação: Divisão interna Arquivo .png no Sprite
  • 15. Game API: Sprite  Transformações: macaco.setTransform(Sprite.TRANS_ROT90) macaco.setTransform(Sprite.TRANS_NONE)
  • 16. Game API: TiledLayer  Classe que normalmente é usada para representações de mapas, utilizando uma matriz bidimensional com índices de imagens.  Possui suporte a tiles animadas (efeito de água se movimentando e etc).
  • 18. Game API: LayerManager  Classe responsável por gerenciar todos os Layers.  Sprite  TiledLayer
  • 20. Game Loop (cont.) public class MeuJogo extends GameCanvas public void run() { implements Runnable { Graphics g = getGraphics(); private boolean running; while (running) { private int delay = 30; checkInput(); public SimpleGameCanvas() { update(); super(true); render(g); } flushGraphics(); public void start() { try { Thread.sleep(delay); } running = true; catch (InterruptedException ie) { stop(); } Thread t = new Thread(this); } t.start(); } } private void update() {} public void stop() { running = false; } private void checkInput() {} private void render(Graphics g) {} }
  • 21. FIM Perguntas ou Dùvidas?
  • 22. Contato Obrigado! [email protected] http://danielvalente.com.br