Desenho direto - Active Rendering --- Dúvida

8 respostas
SirDominque

Dúvida:
http://www.pontov.com.br/site/java/48-java2d/124-desenho-direto-active-rendering

Não estou entendendo esses 3 métodos e quais as funções deles.
Meu netbeans nao aceitou @override.

Alguém pode me dar umas dicas? Valeu!!!

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package estudandopontov;

import java.awt.Color;
import java.awt.Graphics;

/**
 *
 * @author André
 */
public class ActiveRendering extends javax.swing.JFrame {

    /**
     * Creates new form ActiveRendering
     */
    public ActiveRendering() {
        initComponents();
        setIgnoreRepaint(true);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 580, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 500, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(ActiveRendering.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(ActiveRendering.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(ActiveRendering.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(ActiveRendering.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new ActiveRendering().setVisible(true);
            
            }
        });
    }
    // Variables declaration - do not modify
    // End of variables declaration

public void setup() {
    //Criamos a estratégia de double buffering
    createBufferStrategy(2);
    //Subtrai a decoração da janela da largura e altura máximas
    //percorridas pela bola.
    ball = new Ball(getWidth() - getInsets().left - getInsets().right, 
            getHeight() - getInsets().top - getInsets().bottom);
}


public void renderGraphics() {        
    Graphics g = getBufferStrategy().getDrawGraphics();
     
    //Criamos um contexto gráfico que não leva em conta as bordas
    Graphics g2 = g.create(getInsets().right, 
               getInsets().top, 
               getWidth() - getInsets().left, 
               getHeight() - getInsets().bottom);
    //Limpamos a tela
    g2.setColor(Color.BLACK);        
    g2.fillRect(0, 0, getWidth(), getHeight());
     
 
    ball.draw((Graphics2D) g2); //Desenhamos a bola
     
    //Liberamos os contextos criados.
    g.dispose(); 
    g2.dispose();
}
 

public void paintScreen() {
    if (!getBufferStrategy().contentsLost())
        getBufferStrategy().show();
}

}

8 Respostas

ViniGodoy

@Override é com “O” maiúsculo.

E você não falou quais três métodos vc não entende. Sua classe tem uns 5.

SirDominque
Não entendi como eles são chamados , e qual deles que esta movendo a imagem de lugar…

public void renderGraphics()

public void setup()

Eu entendi sobre o buffer e o resto. Só esses dois que , eu queria saber a função deles.
E eu tentei com @Override mas também nao foi.

ViniGodoy

Eles estão sendo chamados pelo game loop.

Você leu o artigo sobre GameLoop, certo?

SirDominque

ViniGodoy:
Eles estão sendo chamados pelo game loop.

Você leu o artigo sobre GameLoop, certo?

http://www.pontov.com.br/site/java/48-java2d/121-o-loop-de-animacao

Mas… porque tem essa classe gameloop e a classe de interface? Tem que ser duas classes ou eu coloco os métodos dentro da classe da interface?

Eu queria primeiro fazer o mais simples, apenas fazer aquilo que vc tinha dito no meu outro tópico> , fazer um método que toda vez que eu chame ele , eu possa desenhar o que eu quiser, aonde quiser na tela. E depois fazer esses métodos de loop, pq olhando agora, eu não estou conseguindo entender. Tinha até parado uns dias pra ver se conseguia, mas eu li, e re-li e ainda nao entendi.

Pode me ajudar? rsrsrs sem querer pedir muito

E

André, você precisa ler com mais atenção o artigo que o Vinicius escreveu. Melhor explicado que isso acho realmente difícil.

E é bom começar a ler pelo primeiro artigo:

http://www.pontov.com.br/site/java/48-java2d

SirDominque

entanglement:
André, você precisa ler com mais atenção o artigo que o Vinicius escreveu. Melhor explicado que isso acho realmente difícil.

E é bom começar a ler pelo primeiro artigo:

http://www.pontov.com.br/site/java/48-java2d


ok, vou tentar ler de novo, desde o começo. Qualquer coisa posto de novo.

ViniGodoy

É melhor fazer duas classes. Um game loop simples até poderia ser implementado na mesma classe. Você simplesmente dispararia um runnable chamando continuamente os métodos, e dando uma pausa para garantir a execução em 33ms. Mas esse tipo de game loop não prevê a execução em máquinas mais lentas e é muito sujeito a imprecisões do timer.

O gameloop do artigo que descrevi é bastante completo, por isso, o código fica tão longo. Nesse caso, ficaria um tanto confuso deixar tudo em uma classe só. Se quiser usa-lo sem entende-lo, basta copiar o código final do game loop para sua aplicação, e simplesmente fazer sua interface gráfica implementar a interface do jogo.

Você chegou a baixar o exemplo desse artigo:
http://www.pontov.com.br/site/java/48-java2d/123-a-primeira-animacao

E executar? Aliás, você chegou a ler esse artigo? Ou tentou pular direto para “Desenho direto”?

SirDominque

É melhor fazer duas classes. Um game loop simples até poderia ser implementado na mesma classe. Você simplesmente dispararia um runnable chamando continuamente os métodos, e dando uma pausa para garantir a execução em 33ms. Mas esse tipo de game loop não prevê a execução em máquinas mais lentas e é muito sujeito a imprecisões do timer.

O gameloop do artigo que descrevi é bastante completo, por isso, o código fica tão longo. Nesse caso, ficaria um tanto confuso deixar tudo em uma classe só. Se quiser usa-lo sem entende-lo, basta copiar o código final do game loop para sua aplicação, e simplesmente fazer sua interface gráfica implementar a interface do jogo.

Você chegou a baixar o exemplo desse artigo:
http://www.pontov.com.br/site/java/48-java2d/123-a-primeira-animacao

E executar? Aliás, você chegou a ler esse artigo? Ou tentou pular direto para “Desenho direto”?

Oi Viny. Li o artigo , mas ainda nao entendi. Li desde o começo, mas achei essas classes e métodos um pouco complicados. Acho que ainda não estou pronto.
Acho que vou dar um tempo nisso.

Criado 15 de julho de 2012
Ultima resposta 16 de jul. de 2012
Respostas 8
Participantes 3