小弟最近正在开发一个类似劲乐团的小游戏,基于JAVA.Swing,需要处理复杂的键盘事件,以前只知道用DirectInput可以,但是LINUX下就没有了,我希望能跨平台。请问JAVA里或者相关的其他东西有什么能解决这个问题的?
如果一个键按下不放,Swing的键盘监听者KeyListener会重复触发KeyPressed事件,这可不是我想要的结果,我希望的效果是:
对于指定的键,按下则触发一个事件,不会重复触发,直到它弹起,则触发弹起事件。而且Swing无法处理多个键的情况,但游戏要求能响应同时按下7个键。
不甚感激!

解决方案 »

  1.   

    你感觉Swing无法处理多个键的情况,那是你的问题,不是Swing的问题.
    一个比较简单的方法,对每一个键,建立一个bool变量,
    在addKeyListener的keyPressed函数中,当你指定的键被按下后,与他对应的bool变量值为true
    在keyReleased函数中,被按释放的键对应的bool变量值为false在判断复合键是否被按下时,只需要判断这几个键对应的bool变量是否都为true,如果都是,则他们都被按下了,执行对应的操作.
      

  2.   

    !!!茅塞顿开
    不过不直到这样是否需要多线程呢?我的意思是,一个线程监听键盘,一个线程监听bool数组?嗯,思路大概有了,谢谢Inhibitory!
      

  3.   

    经测试,可行。方法如下:
    创建一个监听器单件,拥有一个bool数组
    当按下需要的键时,判断对应bool是否置true,若是,则说明此事件是重复激发,放弃事件。否则,对应的bool数组置true,激发事件处理函数。
    释放按键时,对应bool置false感谢Inhibitory!
    结帖给分