Java动画不工作
我试图用Java制作一个正方形的动画,但当我按下键时,正方形会留下一条轨迹。我希望广场本身移动时不会留下像蛇一样的痕迹 我怎样才能解决这个问题?我能帮你修一下吗 这是我的密码:Java动画不工作,java,animation,Java,Animation,我试图用Java制作一个正方形的动画,但当我按下键时,正方形会留下一条轨迹。我希望广场本身移动时不会留下像蛇一样的痕迹 我怎样才能解决这个问题?我能帮你修一下吗 这是我的密码: 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
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();
}
}
在绘制具有更新坐标的新正方形之前,应始终擦除画布上已绘制的正方形(即,用背景色覆盖)。为此,您可以按如下方式修改代码:
int prevX, prevY;
public void render() {
BufferStrategy bs = this.getBufferStrategy();
if (bs == null) {
createBufferStrategy(3);
return;
}
Graphics g = bs.getDrawGraphics();
// erase the previous square
g.setColor(getBackground());
g.fillRect(prevX, prevY, 300, 300);
// draw the new square
g.setColor(Color.CYAN);
g.fillRect(x, y, 300, 300);
g.dispose();
bs.show();
}
public void tick() {
// backup the previous coordinates
prevX = x;
prevY = y;
x += velx;
y += vely;
}