JAVA GAMES 2D::Imagens::06
"
Olá pessoal!
Nesse tutorial, vamos aprender como desenhar imagens (PNG GIF JPG) nas telas de nossos games! é bem legal usar imagens para construir games, eles ficam com um design mais chamativo, e dá menos trabalho que desenhar com usando a Classe geom que vimos nos tutoriais anteriores... recomendo que aprendam a usar alguma ferramenta de desenhos em VETOR (indico o Inkscape ou CorelDraw) e outra ferramente para tratar imagens (indico o Gimp ou Photoshop), mas use o de sua preferência, estarei usando o Inkscape e Gimp em alguns dos exemplos que irei postar ainda... (pegar algumas no google também! \(^_^)/ )...
Muito bem... o primeiro passo para desenhar imagens na tela é ter uma variável do tipo imagem, e carregar uma imagem para essa variável!
(lembrando ao declarar uma variavel do tipo ImageIcon devemos importar essa classe primeir, o Eclipse importa automaticamente para mim, quando uso o autocomplete)
Lembre de usar imagens com fundo transparente quando for desenhar a Sprite de algum personagem para seu jogo!
Novamente crie um pacote chamado tutorial6 dentro do projeto JAVAGAMES2D, cole lá a classe Game.java que deixamos como modelo, salve uma imagem de sua preferência nesse mesmo pacote (ah! ou baixe o exemplo pronto no link acima!!!)
Olhe como via ficar o nosso código:
(no inicio declaramos a variável abelha e mandamos desenhar no método desenharGraficos() )
Muito bem... tudo okay!!! agora vamos entender alguns pequenos detalhes...
muito bem... sabemos que PI = 3.14; que é = a 180°, como é que calculamos 1°?
dividimos PI/180 = 0,017444444, muito bem isso é igual a 1° e como é que calculamos 45º é só multiplicar (PI/180)*45 !!!
no método translate(x,y) definimos as coordenadas dos eixos onde a imagem girará em torno!
pra rotacionar a imagem em torno dela mesma, fizemos o seguinte:
vamos supor que a imagem esteja nas coordenadas x=0 e y=0 e suas dimensões são w=100 e h=100
sabemos que o centro da imagem é a coordenada x=50 e y=50, como é que calculamos isso ?
bem e só dividir w e h (width e Height = largura e altura) da imagem por 2!
e se posicionarmos a imagem na coordenada x=25 e y=50 o centro da imagem será =
(w/2)+25 e (h/2)+50, aaaaaaaaaaaaah! intendi, é por isso que somamos 300 no translate(x+300,y+300) no nosso exemplo acima! \(^_^)/ !!!
continuando..... quando mudamos o centro de rotação da imagem, a mesma é deslocada em função disso! por isso que ao definirmos o exito, depois mandar rotacionar, temos que voltar o que foi feito ao normal! então se eu deslocar (x+300) terei depois que deslocar -(x+300) okay ?!
O meu ficou assim:
Muito bem pessoal! até o próximo tutorial!
Olá pessoal!
Nesse tutorial, vamos aprender como desenhar imagens (PNG GIF JPG) nas telas de nossos games! é bem legal usar imagens para construir games, eles ficam com um design mais chamativo, e dá menos trabalho que desenhar com usando a Classe geom que vimos nos tutoriais anteriores... recomendo que aprendam a usar alguma ferramenta de desenhos em VETOR (indico o Inkscape ou CorelDraw) e outra ferramente para tratar imagens (indico o Gimp ou Photoshop), mas use o de sua preferência, estarei usando o Inkscape e Gimp em alguns dos exemplos que irei postar ainda... (pegar algumas no google também! \(^_^)/ )...
Muito bem... o primeiro passo para desenhar imagens na tela é ter uma variável do tipo imagem, e carregar uma imagem para essa variável!
(lembrando ao declarar uma variavel do tipo ImageIcon devemos importar essa classe primeir, o Eclipse importa automaticamente para mim, quando uso o autocomplete)
ImageIcon abelha = new ImageIcon("src/pacote/imagem.png");
Lembre de usar imagens com fundo transparente quando for desenhar a Sprite de algum personagem para seu jogo!
Novamente crie um pacote chamado tutorial6 dentro do projeto JAVAGAMES2D, cole lá a classe Game.java que deixamos como modelo, salve uma imagem de sua preferência nesse mesmo pacote (ah! ou baixe o exemplo pronto no link acima!!!)
Olhe como via ficar o nosso código:
(no inicio declaramos a variável abelha e mandamos desenhar no método desenharGraficos() )
import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import javax.swing.ImageIcon; import javax.swing.JFrame; public class Game extends JFrame { BufferedImage backBuffer; int FPS = 30; int janelaW = 500; int janelaH = 500; ImageIcon abelha = new ImageIcon("src/tutor6/bee.png"); ImageIcon fundo = new ImageIcon("src/tutor6/fundo.png"); public void atualizar() { } public void desenharGraficos() { Graphics g = getGraphics(); //ISSO JÁ ESTAVA AQUI Graphics bbg = backBuffer.getGraphics();//ISSO TAMBÉM JÁ ESTAVA AQUI... //AQUI VAMOS MANDAR DESENHAR ALGUNS IMAGENS NA TELA bbg.drawImage(fundo.getImage(),0,0,this);//QUI DESENHAMOS O FUNDO //AS DIMENSÕES ORIGINAIS DO FUNDO SÃO: 500X500 QUE É O TAMANHO DA NOSSA TELA! //DESENHANDO A ABELHA NAS COORDENADAS X=200 e Y=200 bbg.drawImage(abelha.getImage(),200,200,this); //aqui fica com as dimensões originais! //AQUI DEFINI A LARGURA E ALTURA DA IMAGEM bbg.drawImage(abelha.getImage(),100,100,40,40,this); //aqui não fica com as dimensões originais! //AQUI VAMOS ROTACIONAR A IMAGEM EM 45º //PARA ISSO VAMOS USAR OUTRA VARIAVEL DO TIPO Graphics2D //SE NÃO usarmos outra variável tudo que tá no buffer será rotacionado também! Graphics2D bbg2d = (Graphics2D) backBuffer.getGraphics();//AQIU É NOSSA OUTRA VÁRIAVEL! //para rotacionar primeiro define o eixo (isso desloca a imagem, então depois temos que desfazer) //vou por o exito no meio, então é só dividir a altura e largura da imagem por 2 bbg2d.translate((abelha.getIconWidth()/2)+300, (abelha.getIconHeight()/2)+300); //tem que desfazer isso depois que a imagem será deslocada! bbg2d.rotate(45*(Math.PI/180)); //vamos calcular 45º bbg2d.translate(-((abelha.getIconWidth()/2)+300), -((abelha.getIconHeight()/2)+300));// agora desfaz o négocio do exito!!! //veja que eu passei os mesmos valores só que negativos, ovserve o sinal de "-" menos bbg2d.drawImage(abelha.getImage(),300,300,this); //desenha a imagem //================================================================================== g.drawImage(backBuffer, 0, 0, this);//OBS: ISSO DEVE FICAR SEMPRE NO FINAL! } public void inicializar() { setTitle("Titulo do Jogo!"); setSize(janelaW, janelaH); setResizable(false); setDefaultCloseOperation(EXIT_ON_CLOSE); setLayout(null); setVisible(true); backBuffer = new BufferedImage(janelaW, janelaH, BufferedImage.TYPE_INT_RGB); } public void run() { inicializar(); while (true) { atualizar(); desenharGraficos(); try { Thread.sleep(1000/FPS); } catch (Exception e) { System.out.println("Thread interrompida!"); } } } public static void main(String[] args) { Game game = new Game(); game.run(); } }
Muito bem... tudo okay!!! agora vamos entender alguns pequenos detalhes...
muito bem... sabemos que PI = 3.14; que é = a 180°, como é que calculamos 1°?
dividimos PI/180 = 0,017444444, muito bem isso é igual a 1° e como é que calculamos 45º é só multiplicar (PI/180)*45 !!!
no método translate(x,y) definimos as coordenadas dos eixos onde a imagem girará em torno!
pra rotacionar a imagem em torno dela mesma, fizemos o seguinte:
vamos supor que a imagem esteja nas coordenadas x=0 e y=0 e suas dimensões são w=100 e h=100
sabemos que o centro da imagem é a coordenada x=50 e y=50, como é que calculamos isso ?
bem e só dividir w e h (width e Height = largura e altura) da imagem por 2!
e se posicionarmos a imagem na coordenada x=25 e y=50 o centro da imagem será =
(w/2)+25 e (h/2)+50, aaaaaaaaaaaaah! intendi, é por isso que somamos 300 no translate(x+300,y+300) no nosso exemplo acima! \(^_^)/ !!!
continuando..... quando mudamos o centro de rotação da imagem, a mesma é deslocada em função disso! por isso que ao definirmos o exito, depois mandar rotacionar, temos que voltar o que foi feito ao normal! então se eu deslocar (x+300) terei depois que deslocar -(x+300) okay ?!
O meu ficou assim:
Muito bem pessoal! até o próximo tutorial!
\_(^_^)_/ Comentários em baixo \_(^_^)_/
"
Olá pessoal!
Nesse tutorial, vamos aprender como desenhar imagens (PNG GIF JPG) nas telas de nossos games! é bem legal usar imagens para construir games, eles ficam com um design mais chamativo, e dá menos trabalho que desenhar com usando a Classe geom que vimos nos tutoriais anteriores... recomendo que aprendam a usar alguma ferramenta de desenhos em VETOR (indico o Inkscape ou CorelDraw) e outra ferramente para tratar imagens (indico o Gimp ou Photoshop), mas use o de sua preferência, estarei usando o Inkscape e Gimp em alguns dos exemplos que irei postar ainda... (pegar algumas no google também! \(^_^)/ )...
Muito bem... o primeiro passo para desenhar imagens na tela é ter uma variável do tipo imagem, e carregar uma imagem para essa variável!
(lembrando ao declarar uma variavel do tipo ImageIcon devemos importar essa classe primeir, o Eclipse importa automaticamente para mim, quando uso o autocomplete)
ImageIcon abelha = new ImageIcon("src/pacote/imagem.png");
Lembre de usar imagens com fundo transparente quando for desenhar a Sprite de algum personagem para seu jogo!
Novamente crie um pacote chamado tutorial6 dentro do projeto JAVAGAMES2D, cole lá a classe Game.java que deixamos como modelo, salve uma imagem de sua preferência nesse mesmo pacote (ah! ou baixe o exemplo pronto no link acima!!!)
Olhe como via ficar o nosso código:
(no inicio declaramos a variável abelha e mandamos desenhar no método desenharGraficos() )
import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import javax.swing.ImageIcon; import javax.swing.JFrame; public class Game extends JFrame { BufferedImage backBuffer; int FPS = 30; int janelaW = 500; int janelaH = 500; ImageIcon abelha = new ImageIcon("src/tutor6/bee.png"); ImageIcon fundo = new ImageIcon("src/tutor6/fundo.png"); public void atualizar() { } public void desenharGraficos() { Graphics g = getGraphics(); //ISSO JÁ ESTAVA AQUI Graphics bbg = backBuffer.getGraphics();//ISSO TAMBÉM JÁ ESTAVA AQUI... //AQUI VAMOS MANDAR DESENHAR ALGUNS IMAGENS NA TELA bbg.drawImage(fundo.getImage(),0,0,this);//QUI DESENHAMOS O FUNDO //AS DIMENSÕES ORIGINAIS DO FUNDO SÃO: 500X500 QUE É O TAMANHO DA NOSSA TELA! //DESENHANDO A ABELHA NAS COORDENADAS X=200 e Y=200 bbg.drawImage(abelha.getImage(),200,200,this); //aqui fica com as dimensões originais! //AQUI DEFINI A LARGURA E ALTURA DA IMAGEM bbg.drawImage(abelha.getImage(),100,100,40,40,this); //aqui não fica com as dimensões originais! //AQUI VAMOS ROTACIONAR A IMAGEM EM 45º //PARA ISSO VAMOS USAR OUTRA VARIAVEL DO TIPO Graphics2D //SE NÃO usarmos outra variável tudo que tá no buffer será rotacionado também! Graphics2D bbg2d = (Graphics2D) backBuffer.getGraphics();//AQIU É NOSSA OUTRA VÁRIAVEL! //para rotacionar primeiro define o eixo (isso desloca a imagem, então depois temos que desfazer) //vou por o exito no meio, então é só dividir a altura e largura da imagem por 2 bbg2d.translate((abelha.getIconWidth()/2)+300, (abelha.getIconHeight()/2)+300); //tem que desfazer isso depois que a imagem será deslocada! bbg2d.rotate(45*(Math.PI/180)); //vamos calcular 45º bbg2d.translate(-((abelha.getIconWidth()/2)+300), -((abelha.getIconHeight()/2)+300));// agora desfaz o négocio do exito!!! //veja que eu passei os mesmos valores só que negativos, ovserve o sinal de "-" menos bbg2d.drawImage(abelha.getImage(),300,300,this); //desenha a imagem //================================================================================== g.drawImage(backBuffer, 0, 0, this);//OBS: ISSO DEVE FICAR SEMPRE NO FINAL! } public void inicializar() { setTitle("Titulo do Jogo!"); setSize(janelaW, janelaH); setResizable(false); setDefaultCloseOperation(EXIT_ON_CLOSE); setLayout(null); setVisible(true); backBuffer = new BufferedImage(janelaW, janelaH, BufferedImage.TYPE_INT_RGB); } public void run() { inicializar(); while (true) { atualizar(); desenharGraficos(); try { Thread.sleep(1000/FPS); } catch (Exception e) { System.out.println("Thread interrompida!"); } } } public static void main(String[] args) { Game game = new Game(); game.run(); } }
Muito bem... tudo okay!!! agora vamos entender alguns pequenos detalhes...
muito bem... sabemos que PI = 3.14; que é = a 180°, como é que calculamos 1°?
dividimos PI/180 = 0,017444444, muito bem isso é igual a 1° e como é que calculamos 45º é só multiplicar (PI/180)*45 !!!
no método translate(x,y) definimos as coordenadas dos eixos onde a imagem girará em torno!
pra rotacionar a imagem em torno dela mesma, fizemos o seguinte:
vamos supor que a imagem esteja nas coordenadas x=0 e y=0 e suas dimensões são w=100 e h=100
sabemos que o centro da imagem é a coordenada x=50 e y=50, como é que calculamos isso ?
bem e só dividir w e h (width e Height = largura e altura) da imagem por 2!
e se posicionarmos a imagem na coordenada x=25 e y=50 o centro da imagem será =
(w/2)+25 e (h/2)+50, aaaaaaaaaaaaah! intendi, é por isso que somamos 300 no translate(x+300,y+300) no nosso exemplo acima! \(^_^)/ !!!
continuando..... quando mudamos o centro de rotação da imagem, a mesma é deslocada em função disso! por isso que ao definirmos o exito, depois mandar rotacionar, temos que voltar o que foi feito ao normal! então se eu deslocar (x+300) terei depois que deslocar -(x+300) okay ?!
O meu ficou assim:
Muito bem pessoal! até o próximo tutorial!
\_(^_^)_/ Comentários em baixo \_(^_^)_/