Criando jogos digitais em java

Preview:

DESCRIPTION

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).

Citation preview

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

Java 2DO 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.)

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.

Java 2D (AWT/Swing)

Java 2DDentre 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

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.

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();• }

Android & Java2DJava2D 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

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.

Perspectiva isométrica ou 2.5D

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.

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.

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.

NiftyGui - Exemplo

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.

JMonkeyEngine & NetBeans(IDE)

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.

RedDwarf (Antigo projeto DarkStar)

Qual base de dados devemos usar?• XML?

• TXT?

• Banco de Dados?

• Banco de Dados Embarcado?

• Objeto Serializado?

• Outros?

Engine(s) Java para 3D

Ardor 3D

Jogos de Sucesso feitos em JavaWurm OnLine [JWS-2.5d] Wakfu [2.5d]

Jogos de Sucesso feitos em JavaRuneScape [3D-Applet]

“O Livro Guiness Mundial dos Recordes reconheceu RuneScape como o MMORPG gratuito mais popular do mundo, pela segunda vez seguida”

Jogos de Sucesso feitos em Java

Taikodom [3D]

Jogos de Sucesso feitos em Java

MineCraft [3D]

Jogos de Sucesso feitos em Java

Angry Birds (Versão em Java): http://celularesmpx.blogspot.com/2011/05/jogo-angry-birds-java.htmlWikia: http://pt.wikipedia.org/wiki/Angry_Birds

Angry Birds [2D]

Estrategia de criação de Mapas(Tiles)

Interação entre personagens (Conversa)

Criando um sistema de Skills

Como trabalhar o sistema de Missões

Definindo/balanceando atributos do herói

Criando Climas

Definindo um Sistema de Batalha

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++.

Engine

www.einformacao.com.br

“Transforme a Fraqueza em Força!”