【发布时间】:2017-07-21 11:26:05
【问题描述】:
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
public class Game extends JFrame implements KeyListener
{
private int charX;
private int charY;
public Game()
{
charX = 250;
charY = 450;
this.setSize(500, 500);
addKeyListener(this);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void keyTyped(KeyEvent event)
{
if(event.getKeyChar() == 'a')
charX-=5;
else if(event.getKeyChar() == 'd')
charX+=5;
else if(event.getKeyChar() == 'w')
charY-=5;
else if(event.getKeyChar() == 's')
charY+=5;
if(charX > 485)
charX-=6;
else if(charX < 10)
charX+=6;
if(charY > 485)
charY-=6;
else if(charY < 30)
charY+=6;
repaint();
}
public void keyPressed(KeyEvent event)
{
}
public void keyReleased(KeyEvent event)
{
}
public void paint(Graphics g)
{
super.paint(g);
g.setColor(Color.BLACK);
g.fillRect(charX, charY, 10, 10);
}
public static void main(String args[])
{
Frame frm = new Game();
frm.setVisible(true);
frm.repaint();
}
}
在学校我使用 Mac,在家里我使用装有 Windows 10 的 PC。在 Mac 上,此代码的行为往往与 Windows 版本不同。在 Mac 版本中,字符(正方形)按预期进行,每次按键仅移动一点。然而,在 Windows 上,如果你按任何方向(如 d),即使它应该只被调用一次,角色也会继续向右移动。不仅如此,绘画时框架也会不断闪烁。所以我想知道为什么 Mac 和 Windows 之间的版本之间存在差异,以及如何解决 Windows 上的闪烁问题。我计划稍后添加 keyPressed 和 keyReleased 方法,所以我认为我不会有不好的时间。
【问题讨论】:
-
这可能有助于解决闪烁问题。 stackoverflow.com/questions/10869548/image-flickers-on-repaint 闪烁很常见,最好的策略是使用缓冲图像,以便屏幕上始终有图像,而不是在重新绘制之前删除场景。
标签: java