Introdução ao Desenvolvimento de Jogos
       2D/3D em Java ME (Parte 1)




           Daniel Valente de Macedo
         ...
Por que Java ME?

   Portabilidade, pois ja é suportado pela maioria
    dos dispositivos móveis disponíveis no
    merca...
Plataforma Java ME
Ciclo de Vida do MIDlet


             Start




                         startApp()

            Paused       pauseApp() ...
Desenvolvemendo Jogos com
MIDP/CLDC 1.0

   Não possui suporte a ponto flutuante (CLDC
    1.0), dificultando o desenvolv...
Desenvolvemendo Jogos com
MIDP/CLDC 1.0 (Cont.)
       Exemplo:
public class MeuJogo extends Canvas implements Runnable {...
Desenvolvemendo Jogos com
MIDP/CLDC 1.0 (Cont.)

   Sem o suporte a double buffering, o "pisca-
    pisca" é constante.
 ...
Desenvolvemendo Jogos com a Game
API

   Disponível no MIDP 2.0
   Possui um conjunto de classes bem otimizadas
    volt...
Classes da Game API
Game API: GameCanvas

   Possui double buffering implementado.
   É possível atualizar a tela no momento
    desejado, o...
Game API: GameCanvas

       Exemplo:
public class MeuJogo extends GameCanvas implements Runnable {
  public void run() {...
Game API: Layer

   Classe abstrata que representa qualquer
    elemento visual na Game API.
   Possui metodos como:
   ...
Game API: Sprite

   Classe que representa uma imagem no jogo,
    por exemplo: Personagem e o Inimigo.
   Possui suport...
Game API: Sprite

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

    Transformações:




                               macaco.setTransform(Sprite.TRANS_ROT90)




maca...
Game API: TiledLayer

   Classe que normalmente é usada para
    representações de mapas, utilizando uma
    matriz bidim...
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 {
               ...
FIM




      Perguntas ou Dùvidas?
Contato



                 Obrigado!

     danielvalentemacedo@gmail.com

          http://danielvalente.com.br
Upcoming SlideShare
Loading in …5
×

Java ME - Game API

3,486 views
3,387 views

Published on

CCT - Outubro de 2009

Published in: Technology, Education
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,486
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
74
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Java ME - Game API

  1. 1. Introdução ao Desenvolvimento de Jogos 2D/3D em Java ME (Parte 1) Daniel Valente de Macedo 7° Semestre
  2. 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).
  3. 3. Plataforma Java ME
  4. 4. Ciclo de Vida do MIDlet Start startApp() Paused pauseApp() Active destroyApp() destroyApp() Destroyed
  5. 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. 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. 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. 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.
  9. 9. Classes da Game API
  10. 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. 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. 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. 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. 14. Game API: Sprite  Frames e animação: Divisão interna Arquivo .png no Sprite
  15. 15. Game API: Sprite  Transformações: macaco.setTransform(Sprite.TRANS_ROT90) macaco.setTransform(Sprite.TRANS_NONE)
  16. 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).
  17. 17. Game API: TiledLayer
  18. 18. Game API: LayerManager  Classe responsável por gerenciar todos os Layers.  Sprite  TiledLayer
  19. 19. Game Loop
  20. 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. 21. FIM Perguntas ou Dùvidas?
  22. 22. Contato Obrigado! danielvalentemacedo@gmail.com http://danielvalente.com.br

×