Java窗体,实现物体无缝移动(八个方位)

Java实现物体8方向无缝移动
本文介绍如何使用Java实现物体(如方块)通过键盘事件监听器进行无缝移动,包括上下左右及斜向八个方位。通过设置线程每20毫秒检查一次按键状态,并利用标志位记录键位状态,解决键位冲突问题。同时,文章还涉及窗口的无边框设置,以及鼠标拖动事件以实现窗口的拖动功能。最终,通过监听线程和标志位,实现在保持移动的同时,能响应多个键位组合,实现物体的复合移动路径。

对象移动,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
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值