BufferedStrategy não está funcionando

3 respostas
R

fala galera, estou tentando reproduzir um programa que vi no site pontov, porém não está saindo como deveria. Comecei a estudar jogos em java a pouco tempo.(1 mês)
O programa é simples, é simplesmente fazer com que uma bola fique andando pela tela. porém está ficando o rastro da bola por onde ela passa, ou seja o BufferedStrategy não está funcionando. Olhei vários sites e códigos, porém não estou conseguindo achar onde está o erro. Se alguém puder me ajudar, agradeço.

Segue as minhas classes:

classe principal

package Aprendendo;

import java.awt.Graphics2D;
import java.awt.image.BufferStrategy;
import javax.swing.JFrame;


public class Principal {

   
    public static void main(String args[]) {
        JFrame frame=  new JFrame("Jogo");
        frame.setSize(300, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setIgnoreRepaint(true);
        frame.setLocation(500, 500);
        frame.setVisible(true);
        frame.createBufferStrategy(2);
        loopPrincipal(frame);
    }

    public static void loopPrincipal(JFrame frame) {
        long ultimosSegundo = System.currentTimeMillis();
        Jogo jogo = new Jogo();
        while (jogo.executando()) {
            //pego o tempo transcorrido
            long delay = System.currentTimeMillis() - ultimosSegundo;
            ultimosSegundo = System.currentTimeMillis();

            //processo a logica do jogo
            jogo.processar(delay);

            //deseho o jogo
            jogo.desenhar((Graphics2D) frame.getBufferStrategy().getDrawGraphics());

            //mostro na tela
            frame.getBufferStrategy().show();


            try {
                Thread.sleep(20);
            } catch (InterruptedException e) {
            }

        }
        frame.dispose();
        System.exit(0);

    }
}

classe jogo:

package Aprendendo;

import java.awt.Color;
import java.awt.Graphics2D;


class Jogo {

    Bola bola = new Bola();
    private boolean executando=true;
        
    public boolean executando(){
        return executando;
    }

    public void processar(Long delay){
        bola.processar(delay);

    }

    public void desenhar(Graphics2D g){
        g.setBackground(Color.BLACK);
        g.drawRect(0, 0, 300, 300);
        bola.draw(g);
    }

    


}

e classe bola:

package Aprendendo;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Ellipse2D;


public class Bola {

    final int TAMANHO = 12;
    final float VELOCIDADE = 100;
    float x=30;
    float y=30;
    float vx = VELOCIDADE;
    float vy = VELOCIDADE/2;

    public  void processar(Long delay) {
        x+= (delay * vx) / 1000;
        y+= (delay * vy)/1000;
    }

    public void draw(Graphics g2d){

		Graphics2D g = (Graphics2D) g2d.create();
		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		g.setColor(Color.RED);
		g.fill(new Ellipse2D.Float(x, y, TAMANHO, TAMANHO));
		g.dispose();

    }


}

3 Respostas

ViniGodoy

O comando drawRect só desenha a borda do retângulo. O fillRect é o que pinta o retângulo por dentro.
Por isso sua imagem não está sendo apagada. Não tem nada a ver com o BufferStrategy.

R

poxa vida, que mancada a minha, incrível como eu não percebi isso kkkkk. agradeço muito pela sua ajuda.
vida longa ao guj

ViniGodoy

rodrigojava:
poxa vida, que mancada a minha, incrível como eu não percebi isso kkkkk. agradeço muito pela sua ajuda.
vida longa ao guj

Você ficou muito bolado com o que não conhecia. E não viu o óbvio. Isso acontece com muita frequencia.

Já perdi as contas do número de vezes que fiquei quebrando a cabeça com um problema por horas a fio e, quando estava quase desistindo, chamei um colega para ver e ele apontou o erro imediatamente no meu monitor… :lol:

Criado 30 de abril de 2010
Ultima resposta 1 de mai. de 2010
Respostas 3
Participantes 2