Animação 2D de um fantasma em Java

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.util.Random;
import javax.swing.JFrame;


/**
 * Site: http://programjm.blogspot.com.br/
 * @author João Matheus Santos Assis
 * @version 1.00 2013-06-29
 */
@SuppressWarnings("serial")
public class Fantasma extends JFrame {
    
    // Diretório onde a imagem encontrasse.
    String imagem = "C:\\Users\\Cliente\\Desktop\\fantasma.JPG";
    // Carregando a imagem.
    Image image = Toolkit.getDefaultToolkit().getImage(imagem);

    Random numberRandon = new Random();

    // Atributos dos fantasmas.
    private int moverX = 40;
    private int moverY = 40;
    private int transparenciaDaImagem;
    private int larguraDaImagem;
    private int alturaDaImagem;


    /**
     * É aqui que é repintada a tela depois que o sleep
     * acaba seu repouso de 0,5 segundos.
     */
    public void desenharGraficos() {

        Graphics g = getGraphics();
Graphics2D g2d = (Graphics2D) g.create();

g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, getWidth(), getHeight());
AlphaComposite alpha = 
                AlphaComposite.getInstance(
                AlphaComposite.SRC_OVER, 
(float) transparenciaDaImagem / 100
);
g2d.setComposite(alpha); 


g2d.drawImage(
            image, 
            moverX, 
            moverY, 
            larguraDaImagem, 
            alturaDaImagem,
            this
);  

g2d.dispose();

    }


    /**
     * A transparência do fantasma será definida neste método.
     * O máximo valor que transparenciaDaImagem poderá atingir
     * é 90 e o mínimo 10.
     */
    public void transparencia() {

        transparenciaDaImagem = 10 + numberRandon.nextInt(80);
    }


    /**
    * Aqui é definido a largura e a altura da imagem, 
    * que é gerada aleatoriamente para deixar a aplicação
    * mas dinâmica e "imprevisível".
    */
    public void tamanho() {

        larguraDaImagem = 200 + numberRandon.nextInt(160);
alturaDaImagem = 101 + numberRandon.nextInt(71);
    }


    /**
    * Se a variável moverX for menor do que a largura 
    * da janela subtraido por 120, esta será acrescida
    * de 10, caso o contrário é atribuido a ela o valor 40.
    * 
    * Se a variável moverY for menor do que a altura 
    * da janela subtraido por 120, esta será acrescida
    * de 10, caso o contrário é atribuido a ela o valor 40.
    */ 
    public void mover(){

        moverX = (moverX  < getWidth() - 120) ? moverX += 10 : 40;
moverY = (moverY  < getHeight() - 120) ? moverY += 10 : 40;
    }


    /** Aqui chamamos o método mover, tamanho e transparência.*/
    public void atualizar() {

        mover(); 
tamanho();
transparencia();
    }


    /** 
    * Propriedades da Janela, ou seja,
    * o título, o que acontecerá quando for solicitado
    * o fechamento do JFrame, o tamanho, se ele 
    * poderá ser maximizada ou não, a localização
    * inicial, o layout e a visibilidade da janela.
    */
    public void inicializar() {

        setTitle("Fantasma!");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(700, 700);
setResizable(false);
setLocationRelativeTo(null);
setLayout(null);
setVisible(true);
    }


    /**
    * Método gerenciador da execução da aplicação.
    */
    public void run() {

        inicializar();

while (true) {

            atualizar();
            desenharGraficos();
   
            /* 
             * De 0,5 segundos(500 milissegundos) em
             * 0,5 segundos a janela é atualizada.
             */
            try {
                Thread.sleep(500);
            } catch (Exception e) {
                System.out.println("Thread Interrompida!");
            }
}
  
    }


    /**
     * Método Principal da aplicação.
     */
    public static void main(String[] args) {

        Fantasma janela = new Fantasma();
        janela.run();

    }

}


Palavras-Chaves: Animação, Java 2D, Mover Imagem na tela, Transparência da Imagem, Randomização, Largura, Altura, Atualizar, Inicializar, Métodos, Segundos, Milissegundos, Thread, Laço Infinito, Gerenciador, Execução, Diretório, Aplicação, Propriedades da Janela, Fantasma, Java.



Nota.: Para que este programa execute perfeitamente é necessário ter uma imagem no diretório indicado no Código-Fonte. Baixe uma imagem de um fantasma (recomendamos) ou algo que desejar. O diretório também pode ser perfeitamente alterado para atender as necessidades do programador e/ou usuário.


Artigos relacionados em Java:




Feito no NetBeans-7.1 | Executável





Outra Sugestão!

Feito no NetBeans-7.1 | Executável