sexta-feira, 31 de maio de 2013

JAVA GAMES 2D::Textos::05

Olá pessoal!
Nesse tutorial vamos aprender como exibir textos em nossos jogos usando os métodos drawString() e setFont(), criem outro pacote chamado tutorial5 dentro do nosso projeto JAVAGAMES2D, copie o arquivo Game.java do pacote tutorial3 e cole dentro do pacote tutorial5, lembrando esse Gama.java é a estrutura básica do nosso game, deixamos no pacote tutorial3 como modelo para os futuros games que iremos desenvolver....

Muito bem.... agora adicione o seguinte código dentro do método desenharGraficos(), e vamos testar para ver como fica!

1:  public void desenharGraficos() {  
2:   Graphics g = getGraphics(); //ISSO JÁ ESTAVA AQUI  
3:   Graphics bbg = backBuffer.getGraphics();//ISSO TAMBÉM JÁ ESTAVA AQUI...  
4:   //AQUI VAMOS MANDAR DESENHAR ALGUNS TEXTOS NA TELA  
5:    bbg.setColor(new Color(100,200,100)); //muda a cor!  
6:    bbg.setFont(new Font("Comic Sans MS",Font.BOLD,20));// definimos a fonte, o estilo negrito(bold) e o tamanho  
7:    bbg.drawString("JAVA GAMES 2D", 100, 200); // aqui desenhamos o texto "JAVA GAMES 2D" nas coordenadas X=100 e Y=200  
8:    //OUTROS TESTES...  
9:    bbg.setColor(Color.RED);  
10:    bbg.setFont(new Font("Comic Sans MS",Font.ITALIC,20));  
11:    bbg.drawString("JAVA GAMES 2D", 150, 225);  
12:    bbg.setColor(Color.YELLOW);  
13:    bbg.setFont(new Font("Comic Sans MS",Font.PLAIN,20));  
14:    bbg.drawString("JAVA GAMES 2D", 100, 250);  
15:   //==================================================================================  
16:   g.drawImage(backBuffer, 0, 0, this);//OBS: ISSO DEVE FICAR SEMPRE NO FINAL!  
17:   }  

Entendendo um pouco do que foi feito...
o método setFont() recebe como argumento(parâmetro) um objeto do tipo font, para criar um objeto do tipo font usamos o new Font("Nome da Font",Font.estilo,tamanho), em seguida mandamos desenhar a font com o drawString("texto",x,y)....
então quer dizer que é só isso (¬¬´) ? isso mesmo! bem simples não? \(^_^)/ !!!
O meu ficou assim:



Então é só isso pessoal! até o próximo tutorial!

JAVA GAMES 2D::Formas Geométricas::04

Olá pessoal!
Nesse tutorial vamos aprender como desenhar algumas formas geométricas usando a Classe Geom (java.awt.geom) bem... então ai segue alguns exemplos é super fácil de entender!

ah! crie um projeto dentro de sua workspace chamado JAVAGAMES2D dentro dela crie um pacote chamado tutorial3 e crie uma Classe chamada Game.java com o código do tutorial anterior!!! deixe isso guardado de exemplo, agora crie um pacote chamado tutorial4 e copie e cole a classe Game.java do pacote tutorial3 no pacote tutorial4, e nessa Classe acrescente o seguinte código dentro do método desenharGraficos()  :

 1: public void desenharGraficos() {   
 2:  Graphics g = getGraphics(); //ISSO JÁ ESTAVA AQUI   
 3:  Graphics bbg = backBuffer.getGraphics();//ISSO TAMBÉM JÁ ESTAVA AQUI...   
 4:  //AQUI VAMOS MANDAR DESENHAR COISAS NA TELA   
 5:  bbg.setColor(new Color(100,90,200)); //muda a cor!   
 6:  bbg.drawRect(50, 75, 100, 100); //desenha um retângulo sem preenchimento   
 7:  bbg.setColor(new Color(200,0,200)); //muda a cor   
 8:  bbg.drawOval(50, 200, 100, 100); //desenha uma elipse sem preenchimento   
 9:     //x=50 y=200 largura=100 altura=100   
 10:  bbg.drawLine(250, 250, 300, 300); //desenha uma linha reta   
 11:     //xPont1 = 250 yPonto1 = 250 || xPonto2 = 300 yPonto2 = 300   
 12:  bbg.setColor(new Color(100,200,100)); //   
 13:  bbg.fillRect(50, 350, 100, 100); //Desenhando um retângulo preenchido!   
 14:  bbg.setColor(new Color(255,255,0)); //   
 15:  bbg.fillOval(200, 350, 100, 100); //Desenhando um Elipse preenchido!   
 16:  //==================================================================================   
 17:  g.drawImage(backBuffer, 0, 0, this);//OBS: ISSO DEVE FICAR SEMPRE NO FINAL!   
 18:  }   

bem... existem várias formas geométricas que é possível desenhar! com a Classe geom!, recomendo que façam alguns testes, existem outras formas geométricas como roundRect (retângulo com pontas arredondadas),  drawPolygon() e etc...
como vcs viram também o método setColor() recebe um objeto do tipo Color como parâmetro, e ao criarmos esse objeto, ele possui um construtor que recebe três parâmetros do tipo inteiro new Color(1,2,4);  esses três parâmetros são respectivamente os valores dos tons RGB (red, green, blue), então você pode usar o paint ou qualquer ferramente de desenho para fazer cores, vale lembra que cada número inteiro que você passar como parâmetro pode variar de 0 até 255!



ah! execute a app para ver como ficou, Ctrl+F11(Eclipse) / Shift + F6 (netBeans)
no meu ficou assim:



bem... então é isso ai pessoal!!!, até o próximo tutorial!

JAVA GAMES 2D::Estrutura Básica do Game::03

Nesse III tutorial vamos aprender a criar a estrutura básica para os nossos jogos, definir o tamanho da janela(Frame), criar um Image Buffering e o gameLoop e etc...
Explicando algumas coisas:
Ao criarmos um código que por exemplo: movimente uma nave inimiga em um jogo como Space invader, para que a nave mova-se constantemente, o código que faz esse controle precisa ser executado constantemente, um outro exemplo: ao pressionar uma tecla para mover um personagem, os valores das variáveis que guardam sua posição X e Y seriam modificados, a imagem que aparece na tela precisa ser atualizada, para exibir o personagem em sua nova posição, então para que isso aconteça precisamo criar uma coisa chamamos de game loop, que seria nada mais do que um loop infinito!

1:  while(true){  
2:   //COMANDO!  
3:  }  

Outro detalhe importante do game loop, precisamos controlar a frequência com que a tela será atualizada e os métodos de controle interno do jogo! para isso usaremos o seguinte código:

1:  int FPS = 30; //TAXA DE ATUALIZAÇÃO DA TELA  
2:  while(true){  
3:   Thread.sleep(1000/FPS);  

O método sleep() receberá como parâmetro, um valor inteiro que será o tempo em milissegundos de uma PAUSA que ocorrerá! porem esse é um código perigoso que estamos mandando nossa aplicação executar, teremos então que tratar as exceções que poderão ocorrer, ficando assim:

1:  int FPS = 30; //TAXA DE ATUALIZAÇÃO DA TELA  
2:  while(true){  
3:   try{  
4:    Thread.sleep(1000/FPS);  
5:   }catch(){  
6:    System.out.println("Erro na Thread!");   
7:    //MENSAGEM A SER EXIBIDA NO CONSOLE CASO OCORRA ALGUM ERRO  
8:   }  

Outro detalhe importante na construção de games é, ao mandarmos desenhar algum objeto na tela, como um texto, imagem, forma geométrica, etc, devido ao game loop ficar atualizando a tela o tempo inteiro, dará uma sensação de leg, porque será desenhado na tela elemento a elemento, então qual seria uma solução para esse probleminha?
O Image Buffering, iremos criar um BufferedImage (buffer de imagem)!!!, como é que isso funciona?
Bem é o seguinte... não iremos mais desenhar elementos na tela, ao invés disso iremos desenhar os elementos no buffer, e por fim desenhar o que está no buffer na tela de uma vez só!

então ai segue o corpo do nosso game totalmente comentado:

1:  import java.awt.*;  
2:  import java.awt.image.BufferedImage;  
3:  import javax.swing.JFrame;  
4:  //A CLASSE GAME HERDA AS FUNCIONALIDADES DE JFRAME  
5:  public class Game extends JFrame {  
6:   BufferedImage backBuffer; //ESSE É O NOSSO BUFFER  
7:   int FPS = 30;  //ESSA É A TAXA DE ATUALIZAÇÃO DA TELA  
8:   int janelaW = 500;  //LARGURA DA TELA  
9:   int janelaH = 500;  //ALTURA DA TELA  
10:   //NO NOSSO METODO ATUALIZAR VAMOS CHAMAR OS METODOS  
11:   //QUE SERÃO EXECUTADOS O TEMPO INTEIRO...  
12:   public void atualizar() {  
13:   }  
14:   //NESSE MÉTODO VAMOS DESENHAR  
15:   //FORMAS GEOMETRICAS, IMAGENS E TEXTOS NA TELA E ETC...  
16:   public void desenharGraficos() {  
17:   Graphics g = getGraphics();//COM g IREMOS DESENHAR O QUE ESTÁ NO BUFFER NA TELA  
18:   Graphics bbg = backBuffer.getGraphics();//COM bbg IREMOS DESENHAR NO NOSSO BUFFER  
19:   //AQUI ESTAMOS DESENHANDO O BUFFER NA TELA,  
20:   //NAS COORDENADAS X:0 e Y:0  
21:   g.drawImage(backBuffer, 0, 0, this);  
22:   }  
23:   //ESSE É O NOSSO MÉTODO INICIALIZAR  
24:   //AQUI VAMOS INICIALIZAR ALGUMAS CONFIGURAÇÃO DO frame E OUTRAS CONFIGURAÇÕES  
25:   public void inicializar() {  
26:   setTitle("Titulo do Jogo!");//SETANDO O TITULO DA JANELA  
27:   setSize(janelaW, janelaH);//DEFINIDO AS DIMENSÕES DA JANELA  
28:   setResizable(false);//TIRANDO A PERMISSÃO DO USUÁRIO REDIMENSIONAR A JANELA  
29:   setDefaultCloseOperation(EXIT_ON_CLOSE);//QUANDO FECHARMOS O frame A APLICAÇÃO PARA DE EXECUTAR  
30:   setLayout(null);//COM ISSO PODEREMOS DEFINIAR COORDENADA E DIMESÕES DE ELMENTOS DE FORMULARIO NO NOSSO FRAME  
31:   setVisible(true);//MUDANDO A VISIBILIDADE DO frame PARA TRUE, ASSIM ELE APARECERÁ  
32:   backBuffer = new BufferedImage(janelaW, janelaH, BufferedImage.TYPE_INT_RGB);//CRIANDO O NOSSO BUFFER DE IMAGEM  
33:   }  
34:   //AQUI É O NOSSO MÉTODO RUN()  
35:   //NELE TEMOS O NOSSO GAME LOOP (UM LOOP INFINITO)  
36:   public void run() {  
37:   inicializar();//AQUI CHAMAMOS O METODO INICIALIZAR SOMENTE UMA VEZ, POIS ELE ESTÁ FORA DO NOSSO LOOP  
38:   while (true) {//AQUI É O NOSSO LOOP INFINITO  
39:    atualizar();//CHAMAMOS O METODO ATUALIZAR O TEMPO INTEIRO  
40:    desenharGraficos();//ATUALIZAREMOS O GRÁFICO QUE APARECE NA TELA O TEMPO INTEIRO  
41:    try {  
42:     Thread.sleep(1000/FPS); //TAXA DE ATUALIZAÇÃO NA TELA, FUNCIONA COMO UM DELAY  
43:    } catch (Exception e) {  
44:     System.out.println("Thread interrompida!");  
45:    }  
46:   }  
47:   }  
48:   //AQUI É O NOSSO MÉTODO PRINCIPAL  
49:   public static void main(String[] args) {  
50:   Game game = new Game();//CRIAMOS UM OBJETO A PARTIR DESSA PROPRIA CLASSE  
51:   game.run();//CHAMAMOS O METODO RUN(), O MÉTODO RUN() EXECUTA O INICIALIZAR(), ATUALIZAR() E DESENHARGRAFICOS()  
52:   }  
53:   //-----------------------------------------------------------------------------  
54:  }// FIM DO CÓDIGO FONTE  



Outro pequeno detalhe importante...
Como vamos desenvolver Games 2D, estaremos trabalhando dentro de um plano cartesiano... pra quem não sabe o plano cartesiano foi criado por René Descartes e consiste em em dois eixos perpendiculares um X e outro Y....

porem ....... aqui vai funcionar de uma maneira um pouquinho diferente....


É assim que vamos nos locomover dentro desse plano bidimensional !!!
Então é isso pessoal! continuem no próximo Tutor...

JAVA GAMES 2D::JFrame, Applet, Middlet::02

Olá pessoal!
Irei falar muito rapidamente sobre JFrame, Applet e Middlet!
Basicamente você vai querer portar o jogo que você desenvolveu para uma dessas plataformas: Desktop, WEB ou Dispositivos portáteis!
Bem... então se você quiser desenvolver o jogo para Desktop, poderá usar a classe JFrame da API do JAVA!
Caso seja para WEB, poderá usar a classe Applet da API do JAVA!
E caso seja para dispositivos portáteis, poderá usar a classe Middlet da API do JAVA!
Basicamente (mais bem basicamente mesmo!) é isso..... caso queira mais detalhes, recomendo ler a documentação dessas bibliotecas!

Links da documentação:



O método que utilizaremos para desenvolver os jogos será igual, caso você queira desenvolver os jogos para uma dessas plataformas! No decorrer desses tutoriais vamos utilizar a Classe JFrame!

(Eu disse que seria rapidamente!)

JAVA GAMES 2D::Introdução::01

Olá pessoal!
Bem essa é uma série de tutorias que pretendo postar aqui sobre desenvolvimento de jogos 2D com JAVA.
Ao longo desta série de tutoriais pretendo mostrar como desenvolver 3 Jogos (Snake, Space Invader, plataforma) jogos 2D utilizando java da maneira mais simples e descomplicada possível.

Sumário:


  • JFrame, Applet, Middlet
  • Estrutura básica do game (Janela, ImageBuffering, gameLoop)
  • Formas geométricas
  • Textos
  • Imagens
  • Sons MIDI
  • Animando Sprites
  • Movimentando objetos
  • Colisão (Simples)
  • Colisão (Não tão simples!)
  • Eventos do Teclado
  • Eventos do Mouse
  • Menu
  • Gerando *.JAR Runnable "executável"
  • Jogo Snake passo a passo e comentário para cada linha.
  • Jogo Space Invader passo a passo e comentário para cada linha.
  • Jogo Plataforma(ainda não decidi qual, algum parecido com Super Mário)  passo a passo e comentado linha a linha.
Bem... pessoal... essa será a nossa programação nessa série de Tutoriais, vamos conhecer algumas técnicas interessantes de como desenvolver jogos 2D utilizando Java!
Pré-requisitos:
  • uma JRE e JDK instalada
  • IDE
  • Saber o básico de algoritmo e lógica de programação, básico de java (se souber Orientação a Objetos esses tutoriais ficarão ridiculamente simples)
  • Vontade de aprender!