对象移动,wasd和上下左右键,使用键盘事件监听器但是总有延迟,前几天室友想写个小游戏项目去到老师那里过关时提到这个问题,刚好又需要线程,就弄了一个这个
(如果不想看分析)完整的代码链接在最后
大概是这样的,实现了用键盘控制方块,上下左右,与斜着的八个方位移动,Esc键退出
一开始的思路是,监听这个窗体的按键,来让方块移动,后来,移动确实是移动了,但是操作其他键位的时候刚按下的那个键位就不灵了。
后来想想吧,用线程一开始就让他每二十毫秒监听一次,如果我按下了那个键,就移动一下那个位置,这样既不冲突,又方便。
然后又遇到一个问题,就是,怎么才能让那个线程知道我按下了键呢,这个问题差点把这个方案推翻,后来想到了标志位这个东西,我们设置上下左右四个布尔类型变量做标志位,然后按下为true弹起为false,再配合线程的监听,很好的解决了这个问题
下面是代码分析:
先创建窗体,这里方块为了方便,我直接在JLabel里用了div,然后把窗体的周围Windows所带的放大缩小那些东西去掉。
jf.setSize(400, 400);
Container con = jf.getContentPane();
con.setLayout(null);
jl.setSize(40, 40);
jl.setText("<html><div style=\"width:" + jl.getWidth() + "px;height:"
+ jl.getHeight() + "px;background:red;\"></div></html>");
con.add(jl);
jf.setUndecorated(true);
jf.setVisible(tr