Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Java ME - Game API

3,625 views

Published on

CCT - Outubro de 2009

Published in: Technology, Education
  • Be the first to comment

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

×