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方法,所以我不认为我会有这么糟糕的时间.