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();
}
}