我正在制作一个用鼠标移动方格的游戏,但是当我移动鼠标时,旧方块不会删除,这会产生一条方块。我希望它只有一个跟随我的鼠标的方格。这是我目前的代码。我已阅读使用paintcomponents但我不知道如何使用它,因为我还是初学者。
这是我的“GamePanel”课程
public void mouseMoved(MouseEvent m) {
Graphics g= this.getGraphics();
h.changeX(m.getX());
h.changeY(m.getY());
h.drawHero(g);
}
这是我的“英雄”课程
public void drawHero(Graphics g){
g.drawImage(heroPic,stX,stY,null); //heroPic is a picture I imported
答案 0 :(得分:2)
不要使用this.getGraphics()
。这是你绝对不想做的事情,因为它会产生伪影(正如你所提到的)。
最好将鼠标位置存储为变量,然后在调用paintComponent(Graphics)
方法时处理所有渲染。一定要调用super.paintComponent(Graphics)
来摆脱文物。
通常,您只应处理paintComponent(Graphics)
方法内以及仅从paintComponent(Graphics)
方法调用的任何方法中的图形。
以下是一个问题,涉及您应该避免Component#getGraphics()
的原因:Drawing an object using getGraphics() without extending JFrame
以下是我回答围绕使用图形渲染的另一个问题:Java JFrame draw
答案 1 :(得分:0)
使用扩展JPanel的单独类:
class DrawPane extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(heroPic, x, y, this);
}
}
然后创建一个将保存此类对象的变量:
DrawPane dp = new DrawPane();
之后将变量设置为contence窗格。 :
JFrame.setContencePane(dp);
现在重绘一下:
dp.repaint();
不要担心' Graphics g'你不必输入任何东西。