views:

478

answers:

3

In my game, I want to be able to use the right and left shift keys for different functions. In Java (or another language), is there any way to distinguish between those two?

The KeyEvent class has only VK_SHIFT, which corresponds to both left and right shift keys. Same with Control, Alt, Enter, etc.

My primary concern is someone may be able to use two fingers to rapidly press both keys at the same time, gaining an unfair advantage. Should I be concerned about this?

+11  A: 

I found a Java tutorial that includes a Java WebStart sample and the source code. Looks like the winner is KeyEvent.getKeyLocation()

  • KeyEvent.KEY_LOCATION_STANDARD
  • KeyEvent.KEY_LOCATION_LEFT
  • KeyEvent.KEY_LOCATION_RIGHT
  • KeyEvent.KEY_LOCATION_NUMPAD
  • KeyEvent.KEY_LOCATION_UNKNOWN

References:

Key Listener Demo and Source Code

burtlo
+1  A: 
KeyEvent(Component source, int id, long when, int modifiers, int keyCode, char keyChar, int keyLocation)

Method:

 int    getKeyLocation()

Returns the location of the key that originated this key event.

public static final int KEY_LOCATION_LEFT

A constant indicating that the key pressed or released is in the left key location (there is more than one possible location for this key). Example: the left shift key.
Nick D
A: 

You can also have a look at jinput, a library that gives you direct access to all input devices, giving you a lot more control. If you decided to use LWJGL for your game, it comes with jinput already.

Eli