Java – 游戏代码在Mac和Windows之间的行为不同
发布时间:2020-12-15 04:37:50 所属栏目:Java 来源:网络整理
导读: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); addKeyListe
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方法,所以我不认为我会有这么糟糕的时间. 解决方法
关键事件在操作系统之间不同.当Mac OS可能只创建一个键时,Windows可能会在键关闭时快速创建键入的事件.
解决方案是使用key bindings而不是关键事件,尽管您可能有幸找到了适用于两个操作系统的keyPressed和keyReleased的组合(仍然建议只使用键绑定). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |