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)
1: 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() )
1: import java.awt.*;
2: import java.awt.image.BufferedImage;
3: import java.io.File;
4: import javax.swing.ImageIcon;
5: import javax.swing.JFrame;
6: public class Game extends JFrame {
7: BufferedImage backBuffer;
8: int FPS = 30;
9: int janelaW = 500;
10: int janelaH = 500;
11: ImageIcon abelha = new ImageIcon("src/tutor6/bee.png");
12: ImageIcon fundo = new ImageIcon("src/tutor6/fundo.png");
13: public void atualizar() {
14: }
15: public void desenharGraficos() {
16: Graphics g = getGraphics(); //ISSO JÁ ESTAVA AQUI
17: Graphics bbg = backBuffer.getGraphics();//ISSO TAMBÉM JÁ ESTAVA AQUI...
18: //AQUI VAMOS MANDAR DESENHAR ALGUNS IMAGENS NA TELA
19: bbg.drawImage(fundo.getImage(),0,0,this);//QUI DESENHAMOS O FUNDO
20: //AS DIMENSÕES ORIGINAIS DO FUNDO SÃO: 500X500 QUE É O TAMANHO DA NOSSA TELA!
21: //DESENHANDO A ABELHA NAS COORDENADAS X=200 e Y=200
22: bbg.drawImage(abelha.getImage(),200,200,this); //aqui fica com as dimensões originais!
23: //AQUI DEFINI A LARGURA E ALTURA DA IMAGEM
24: bbg.drawImage(abelha.getImage(),100,100,40,40,this); //aqui não fica com as dimensões originais!
25: //AQUI VAMOS ROTACIONAR A IMAGEM EM 45º
26: //PARA ISSO VAMOS USAR OUTRA VARIAVEL DO TIPO Graphics2D
27: //SE NÃO usarmos outra variável tudo que tá no buffer será rotacionado também!
28: Graphics2D bbg2d = (Graphics2D) backBuffer.getGraphics();//AQIU É NOSSA OUTRA VÁRIAVEL!
29: //para rotacionar primeiro define o eixo (isso desloca a imagem, então depois temos que desfazer)
30: //vou por o exito no meio, então é só dividir a altura e largura da imagem por 2
31: bbg2d.translate((abelha.getIconWidth()/2)+300, (abelha.getIconHeight()/2)+300); //tem que desfazer isso depois que a imagem será deslocada!
32: bbg2d.rotate(45*(Math.PI/180)); //vamos calcular 45º
33: bbg2d.translate(-((abelha.getIconWidth()/2)+300), -((abelha.getIconHeight()/2)+300));// agora desfaz o négocio do exito!!!
34: //veja que eu passei os mesmos valores só que negativos, ovserve o sinal de "-" menos
35: bbg2d.drawImage(abelha.getImage(),300,300,this); //desenha a imagem
36: //==================================================================================
37: g.drawImage(backBuffer, 0, 0, this);//OBS: ISSO DEVE FICAR SEMPRE NO FINAL!
38: }
39: public void inicializar() {
40: setTitle("Titulo do Jogo!");
41: setSize(janelaW, janelaH);
42: setResizable(false);
43: setDefaultCloseOperation(EXIT_ON_CLOSE);
44: setLayout(null);
45: setVisible(true);
46: backBuffer = new BufferedImage(janelaW, janelaH, BufferedImage.TYPE_INT_RGB);
47: }
48: public void run() {
49: inicializar();
50: while (true) {
51: atualizar();
52: desenharGraficos();
53: try {
54: Thread.sleep(1000/FPS);
55: } catch (Exception e) {
56: System.out.println("Thread interrompida!");
57: }
58: }
59: }
60: public static void main(String[] args) {
61: Game game = new Game();
62: game.run();
63: }
64: }
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!
Nenhum comentário:
Postar um comentário