Java'da bir kareyi canlandırmaya çalışıyorum, ancak tuşlara bastığımda, karenin arkasında bir iz kalıyor. Meydanın, yılan gibi bir iz bırakmadan hareket etmesini istiyorum.Java Animasyonu Çalışmıyor
Bunu nasıl düzeltebilirim? Düzeltmek için yapabileceğim bir şey var mı? güncellenmiş koordinatlarla yeni kare çizim önce (yani arka plan rengiyle üzerine yazmak) Her zaman zaten tuval üzerine çizilmiş kare silmek gerekir
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferStrategy;
import javax.swing.JFrame;
public class Main extends Canvas implements KeyListener, Runnable {
Thread t;
boolean running = false;
int x = 200;
int y = 200;
int velx;
int vely;
public Main() {
setFocusable(true);
requestFocus();
addKeyListener(this);
}
public void run() {
while (running) {
render();
tick();
}
stop();
}
synchronized void start() {
if (running) return;
running = true;
t = new Thread(this);
t.start();
}
synchronized void stop() {
try {
t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.exit(1);
}
public void render() {
BufferStrategy bs = this.getBufferStrategy();
if (bs == null) {
createBufferStrategy(3);
return;
}
Graphics g = bs.getDrawGraphics();
g.setColor(Color.CYAN);
g.fillRect(x, y, 300, 300);
g.dispose();
bs.show();
}
public void tick() {
x += velx;
y += vely;
}
@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_RIGHT) {
velx += 5;
} else if (key == KeyEvent.VK_LEFT) {
velx -= 5;
} else if (key == KeyEvent.VK_DOWN) {
vely += 5;
} else if (key == KeyEvent.VK_UP) {
vely -= 5;
}
}
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyReleased(KeyEvent e) {
velx = 0;
vely = 0;
}
public static void main (String args[]){
JFrame frame = new JFrame("Animation");
Main main = new Main();
frame.setSize(1200, 800);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.add(main);
frame.setResizable(false);
frame.setVisible(true);
main.start();
}
}