Este Slide foi feito para uma palestra sobre Jogos Digitais em Java, mostrando padrões e similaridades existentes em diferentes abientes, como por exemplo (Criando um jogo em Java no Android ou PC).
SEAC: Um Simulador Online para Ensino de Arquitetura de Computadores
CRIANDO JOGOS DIGITAIS COM JAVA
1. CRIANDO JOGOS DIGITAIS EM JAVA
Autor
Michel Pinheiro Montenegro (michel.montenegro@gmail.com):
Mais de 14 anos de experiência profissional na área de T. I.
Bacharel em Sistemas de Informação pelo Instituto de Estudos
Superiores da Amazônia - IESAM. Esta cursando sua pós-
graduação em Latu Sensu em Engenharia de Sistemas pela Escola
Superior Aberta do Brasil - ESAB. Participação em grandes projetos
para o Estado como Transparência-Pará. Possui 16 cursos
extracurriculares na área de T.I
2. Java 2D
O Java 2D é implementado como uma extensão do Abstract
Window Toolkit (AWT).
AWT tornou-se muito poderoso depois da adição de outra
extensão: o Swing.
Era delegado a AWT a tarefa de desenhar janelas, botões e
caixas de texto ao sistema operacional. Porém isso não era
muito portável e limitava severamente a performance do Java
em aplicações mais sérias. Então, associaram a AWT uma
nova extensão, chamada Swing, que desenharia integralmente
todos os componentes de tela. Ao fazer isso, a biblioteca Java
2D ganhou grande importância.)
3. Java 2D
• O Swing rapidamente tornou-se o padrão do Java para
todo o tipo de aplicação desktop.
• Uma de suas grandes reclamações sempre foi a
performance, o que motivou os desenvolvedores da Sun
a investir em otimizações agressivas no Java 2D. Entre
elas, está a aceleração de hardware (integrada com
OpenGL), possibilidade de trabalhar em modo janela
exclusivo (FSEM), otimizações agressivas na biblioteca
de manipulação de imagens, entre outras coisas.
5. Java 2D
Dentre as principais capacidades do Java 2D, podemos citar:
• Um modelo uniforme de desenho para dispositivos de vídeo e impressoras
• Um grande número de primitivas geométricas
(pontos, linhas, retângulos, arcos e elipses e curvas), e um mecanismo para
se desenhar qualquer forma geométrica
• Mecanismos para detectar colisão em texto e imagens
• Modelos de composição (Alpha Composition), que permitem escolher como
combinar imagens que se interceptam
• Modelo de cores avançado
• Diretivas para controlar a qualidade do desenho
• Classes para manipulação uniforme dos principais formatos de imagem
6. Java 2D
Espaço de coordenadas
O Java 2D permite o trabalho em dois tipos de sistemas de coordenadas:
As coordenadas do dispositivo: se referem ao sistema do hardware que está sendo
trabalhado. Vão alterar de acordo com a resolução de tela, ou o tamanho da folha, por
exemplo.
As coordenadas de usuário: São um sistema lógico, usado pelo seu programa. Elas
são uniformes e independentes de dispositivo, é o próprio Java 2D que se encarrega da
conversão de um sistema para outro.
7. Java 2D
• O contexto gráfico
• Todo desenho no Java 2D é feito através da classe Graphics2D. Essa classe.
que deriva da classe Graphics, representa o contexto gráfico sobre o qual o
desenho será feito.
• public void pintarFantasma(Graphics g) {
• //1. Copiamos o contexto gráfico
• Graphics2D g2d = (Graphics2D) g.create();
•
• //2. Desenhamos o fantasma 80% transparente
• AlphaComposite alpha = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.8);
• g2d.setComposite(alpha);
• g2d.translate(10, 10);
• g2d.rotate(Math.toRadians(50));
• g2d.drawImage(x, y, phantomImage, null);
•
• //3. Descartamos a cópia do contexto gráfico
• g2d.dispose();
• }
8. Android & Java2D
Java2D Android Descrição
Graphics Canvas Onde tudo é desenhado e
manipulado
AffineTransform Matrix serve para fazer conversões de
coordenadas, por exemplo.
Serve também para fazer
rotações, translações e
modificações de escala.
BufferedImage Bitmap e Drawable podemos requisitar ao objeto
Graphics de qualquer imagem,
que realize uma pintura ou
escreva texto sobre imagens
da mesma forma que fazemos
para desenhar os
componentes de tela
9. Android & Java2D
• Observação sobre o AffineTransform (Matrix): O Java2D só
sabe desenhar uma elipse deitada ou em pé, mas não inclinada. Se
você setar corretamente as coordenadas com transformações, o
Java2D consegue desenhar a elipse inclinada, por exemplo. Isso
também serve para desenhar texto ou qualquer outra figura
inclinada, invertida ou com a escala alterada.
11. LWJGL - Lightweight Java Game Library
• Lightweight Library se traduz como “Biblioteca leve”
• OpenGL (Open Graphics Library)
• OpenCL (Open Computing Language)
• OpenAL (Biblioteca Áudio Aberto)
LWJGL fornece acesso aos controladores, como Gamepads, volante e
Joysticks.Lembrando que LWJGL esta para Java como SDL (Simple
DirectMedia Layer) esta para C++.
Assim como C++, o Java usa Bindings(Ligações) para acesso a
bibliotecas nativas (Lembrando que Java foi feito em cima de C/C++)
Esta biblioteca esta acima da camada do Java2D.
12. Slick2D
• Utiliza internamente LWJGL
• Tornar a transição de Java2D para OpenGL de forma fácil.
• Gerar distribuição via WebStart sem complexidade.
• Ajuda com renderização, som, entrada de colisão e outras coisas.
• A planos de em algum momento trabalharem com 3D.
• Suporte a “Maquinas de Estado”.
• Funciona com Applets, Desktop e tem recentemente uma versão
para Android.
13. NiftyGui
• É uma biblioteca Java que suporta a construção de interfaces de usuário
interativas, para jogos ou aplicações similares.
• Nifty independe de renderers(Java2D, LWJGL, Slick2D, JME
render), pode por exemplo usar o LWJGL para renderização via
OpenGL.
• Configuração via XML ou classes Java
• Usado tanto no Slick2D, JmonkeyEngine(3D)
• Da suporte a aventos como ao clicar e tantos outros controles referente
a entrada de dados (Teclado e Mouse), da suporte a som e musica.
• Obs.: TWL seria o concorrente do NiftyGUI quando oassunto e o
Slick2D(Pois o TWL foi feito especificamente para o Slic2D), ambos
TWL e NiftyGUI estão gerando versões para o Android.
15. JMonkeyEngine
• JMonkey Engine (jME) é um framework Open Source de alta
performance para desenvolvimento de aplicações Java que utilzem
recursos 3D. A primeira versão do framework foi criada por Mark
Powell em 2003, enquanto pesquisava sobre o processo
renderização utilizado em OpenGL.
• A arquitetura do framework é baseada em grafos de cenas, ou
seja, os dados do ambiente estão organizados em uma estrutura de
árvore, onde um nodo origem pode ter um conjunto de nodos filhos.
Estes nodos filhos, por sua vez, têm uma referência única de seu
nodo de origem (também chamado nodo pai). Toda essa estrutura
tem o objetivo de tornar o processo de renderização mais ágil.
17. RedDwarf (Antigo projeto DarkStar)
DarkStar era solução de middleware (open source) para
MMOG escrito em Java pela equipe do Projeto Darkstar na
Sun Microsystems.
Zona de sobrecarga, corrupção de dados, e subutilização de
servidores.
Tem suporte a um banco de dados proprio (Berkeley DB).
Algumas caracteristicas do projeto: Balanceamento de
carga da CPU, Meta-serviços, Armazenamento de dados
persistentes usando Berkeley DB, transações, prevenção de
duping, canal de comunicação (Channel, TCP e UDP),
Estruturas de dados escalaveis, Protocolos plugáveis e
Ferramentas administrativas, Task, Managed-Objects.
21. Jogos de Sucesso feitos em Java
Wurm OnLine [JWS-2.5d] Wakfu [2.5d]
22. Jogos de Sucesso feitos em Java
RuneScape [3D-Applet]
“O Livro Guiness Mundial dos Recordes reconheceu RuneScape como o
MMORPG gratuito mais popular do mundo, pela segunda vez seguida”
25. Jogos de Sucesso feitos em Java
Angry Birds [2D]
Angry Birds (Versão em Java): http://celularesmpx.blogspot.com/2011/05/jogo-angry-birds-
java.html
Wikia: http://pt.wikipedia.org/wiki/Angry_Birds
33. Conclusão
• Todas as linguagens de programação que suporta
desenho trabalha sobre um canvas ou similar(Ex.:
Delphi, VB, etc.).
• Java é uma linguagem muito poderosa e pouco explorada
na área de Jogos.
• Quando paramos para comparar outras tecnologias de
criação de jogos, em especial 2D, notamos que os
conceitos são iguais, o eu muda são os
facilitadores(IDE, Bibliotecas, etc.), e Java não fica atrás
das mais populares, como seria o caso de quem
desenvolve para C++.
34. Engine
www.einformacao.com.br
“Transforme a Fraqueza em Força!”