我的问题是球一旦移动就会变成一条线 这是代码:
package Java;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.*;
public class javagame extends JFrame {
private Image dbImage;
private Graphics dbg;
int x, y;
public class AL extends KeyAdapter {
public void keyPressed (KeyEvent e) {
int keyCode = e.getKeyCode();
if(keyCode == e.VK_LEFT) {
x-= 5;
}
if(keyCode == e.VK_RIGHT) {
x+= 5;
}
if(keyCode == e.VK_UP) {
y-= 5;
}
if(keyCode == e.VK_DOWN) {
y+= 5;
}
}
public void keyReleased (KeyEvent e) {
}
}
public javagame() {
addKeyListener(new AL());
setTitle("Java Game");
setSize(750, 750);
setResizable(false);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
x = 250;
y = 250;
}
public void paint(Graphics g) {
dbImage = createImage(getWidth(), getHeight());
dbg = dbImage.getGraphics();
paintCompenent(dbg);
g.drawImage(dbImage, 0, 0, this);
}
public void paintComponent (Graphics g){
g.drawString("Copy Right All rights reserved to Aaron Collins 2013-2013", 275, 100);
g.drawLine(270, 105, 415, 105);
g.fillOval(x, y, 15, 15);
repaint();
}
public static void main(String[] args) {
new javagame();
}
}
当我说它变成一条线时,我的意思是球移动但不移除前一个 请帮我解决问题,以便继续游戏!
答案 0 :(得分:3)
paint
,但从不调用super.paint
,这意味着该组件永远不会为新的绘制周期准备图形上下文,这意味着您之前绘制的内容仍然存在paintComponent
方法,因为JFrame
不支持此方法JFrame
)上执行自定义绘制,但应该使用JPanel
之类的内容并覆盖它的paintComponent
方法(确保您调用{ {1}}首先)。super.paintComponent
方法中触发重绘的方法......例如paintXxx
repaint
上下文是一个共享资源,这意味着您之前使用的Graphics
上下文用于绘制UI中的所有其他组件。 Graphics
负责通过清除要绘制的区域来为绘画准备paintComponent
上下文。
我建议你仔细阅读Custom Painting
我也会避免使用Graphics
,而是使用Key Bindings API。