Utilizar duas vezes o mesmo método

1 resposta
Onimatsu

Boa tarde a todos.
Estou fazendo um jogo e preciso fazer uma gambiarra que me permita utilizar dois métodos .repaint() abstrato de Graphics na mesma classe.

Tenho uma classe GamePanel que extends JPanel no construtor dela fiz o seguinte:
this.gs =  new paintGraphics();
this.add(gs);             
new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    actionPerformed(null); // a raquete desenhada com velocidade 5
                    try {
                        Thread.sleep(5);
                    } catch (InterruptedException e) {
                        e.getMessage();
                    }
                    if (TECLA FOR PRESSIONADA){
                        this.gs.repaint(); // a bola é redesenhada e fica com outra velocidade
                        try {
                            Thread.sleep(10);
                        } catch (InterruptedException e) {
                            e.getMessage();
                        }
                    }
                }
            }
        }).start();
O gs que aparece um pouco antes de eu iniciar a thread é a instancia da classe:
private class paintGraphics extends JPanel {        
        @Override
        public void paintComponent(Graphics g) {
            ball.sprite(g); // desenha a bola na tela
            g.dispose();
        }
        @Override
        public void repaint() {
            super.repaint();
        } 
    }
Voltando a classe GamePanel tenho os métodos:
public void actionPerformed(ActionEvent e) {
        repaint();
    }

    @Override
    public void paintComponent(Graphics g) { 
        paddle.paintSprite(g); // desenha a raquete na tela
        g.dispose();
    }
E o objetivo é desenhar dois elementos com velocidades diferentes por isso preciso separar os métodos.

1 Resposta

Onimatsu
A questão em si não é complicada, mas, para não ficar confuso a classe completa fica dessa forma:
import javax.swing.JPanel;

public class GamePanel extends JPanel {

    Paddle paddle;
    Ball ball;
    paintGraphics gs;

    public GamePanel() {
        this.gs = new paintGraphics();
        this.add(gs);

        new Thread(new Runnable() {

            @Override
            public void run() {
                while (true) { // repete a thread da bola "sempre" e/ou da raquete "se a tecla for pressionada"
                    actionPerformed(null); // a raquete desenhada com velocidade 5  
                    try {
                        Thread.sleep(5); 
                    } catch (InterruptedException e) {
                        e.getMessage();
                    }
                    if ("TECLA FOR PRESSIONADA")  {
                        this.gs.repaint(); // a bola é redesenhada e fica com outra velocidade 
                        try {
                            Thread.sleep(10);
                        } catch (InterruptedException e) {
                            e.getMessage();
                        }
                    }
                }
        }).start();
    }

    private class paintGraphics extends JPanel {

        @Override
        public void paintComponent(Graphics g) {
            ball.sprite(g);
            g.dispose();
        }

        @Override
        public void repaint() {
            super.repaint(); //1 //
        }
    }
    

    public void actionPerformed(ActionEvent e) {
        repaint(); //2 //desenha os elementos do método abaixo
    }

    @Override
    public void paintComponent(Graphics g) { 
        paddle.paintSprite(g);
        g.dispose();
    }
}
Então como posso utilizar os dois métodos .repaint() sem conflitos? Agradeço quem me der sugestões.
Criado 13 de abril de 2013
Ultima resposta 12 de mai. de 2013
Respostas 1
Participantes 1