GameKeys Module

Quick question on using GameKeys. How do you convert the key value of a key pressed into the equivilent string without looping through every key on the keyboard? Couldn’t find anything in the documentation that shows how :frowning:

I’m not sure i understand You right, but i’ve used GameKeys for my “Custom Keys Demo”, available at my Page. Maybe it helps.
Doc

I did take a look at your demo doc, but couldn’t fully understand how it works :-?

Basically I’m doing the same thing as your demo, building a custom key configuration system:

http://www.blending-online.co.uk/Tr_Menu1.jpg

When the key values are saved to a file, they’re stored as numbers. For example W is saved as 119, S as 115, etc. Once this screen loads up those numbers are converted back into strings and written into the text objects. What I want to know is if the GameKeys module has an easy way of doing this built into it. Basically my method needs to cycle through every key to check if the values match at the moment. This works fine, but I don’t think it’s the most efficient method…

Sorry, i think my english is not as good as i thought. :wink: But i think i understand. I got the same Problem to exract the Keyname out of the GameKeys Modul. I think there is no other Way.
I made it this Way:

GK = GameKeys
Key = KeySensor.getCurrentlyPressedKeys()[0][0]
KeyName = filter(lambda k: getattr(GK,k)==Key,dir(GK))[0]

How does You did this?
Doc

I did it the long way :stuck_out_tongue:

The script only runs once per key set, so in this case the inefficiency isn’t really a problem. I’ll probably put all this into an array later just to tidy up the code. The advantage of doing it this way is I can choose what text is displayed for each key, but it was a pain typing it all out.

Think I’ll need to go read up on python some more as I don’t really understand what’s going on in that last line. Your method is certainly much simpler :wink:

This script takes the list of keys and converts each value into a string for that key.

for key in range(len(g.Keys)):

	if g.Keys[key] == GameKeys.AKEY:	
		g.Keys[key] = "A"
	elif g.Keys[key] == GameKeys.BKEY:
		g.Keys[key] = "B"
	elif g.Keys[key] == GameKeys.CKEY:
		g.Keys[key] = "C"
	elif g.Keys[key] == GameKeys.DKEY:
		g.Keys[key] = "D"
	elif g.Keys[key] == GameKeys.EKEY:
		g.Keys[key] = "E"
	elif g.Keys[key] == GameKeys.FKEY:
		g.Keys[key] = "F"
	elif g.Keys[key] == GameKeys.GKEY:
		g.Keys[key] = "G"
	elif g.Keys[key] == GameKeys.HKEY:
		g.Keys[key] = "H"
	elif g.Keys[key] == GameKeys.IKEY:
		g.Keys[key] = "I"
	elif g.Keys[key] == GameKeys.JKEY:
		g.Keys[key] = "J"
	elif g.Keys[key] == GameKeys.KKEY:
		g.Keys[key] = "K"
	elif g.Keys[key] == GameKeys.LKEY:
		g.Keys[key] = "L"
	elif g.Keys[key] == GameKeys.MKEY:
		g.Keys[key] = "M"
	elif g.Keys[key] == GameKeys.NKEY:
		g.Keys[key] = "N"
	elif g.Keys[key] == GameKeys.OKEY:
		g.Keys[key] = "O"
	elif g.Keys[key] == GameKeys.PKEY:
		g.Keys[key] = "P"
	elif g.Keys[key] == GameKeys.QKEY:
		g.Keys[key] = "Q"
	elif g.Keys[key] == GameKeys.RKEY:
		g.Keys[key] = "R"
	elif g.Keys[key] == GameKeys.SKEY:
		g.Keys[key] = "S"
	elif g.Keys[key] == GameKeys.TKEY:
		g.Keys[key] = "T"
	elif g.Keys[key] == GameKeys.UKEY:
		g.Keys[key] = "U"
	elif g.Keys[key] == GameKeys.VKEY:
		g.Keys[key] = "V"
	elif g.Keys[key] == GameKeys.WKEY:
		g.Keys[key] = "W"
	elif g.Keys[key] == GameKeys.XKEY:
		g.Keys[key] = "X"
	elif g.Keys[key] == GameKeys.YKEY:
		g.Keys[key] = "Y"
	elif g.Keys[key] == GameKeys.ZKEY:
		g.Keys[key] = "Z"
	elif g.Keys[key] == GameKeys.ZEROKEY:
		g.Keys[key] = "0"
	elif g.Keys[key] == GameKeys.ONEKEY:
		g.Keys[key] = "1"
	elif g.Keys[key] == GameKeys.TWOKEY:
		g.Keys[key] = "2"
	elif g.Keys[key] == GameKeys.THREEKEY:
		g.Keys[key] = "3"
	elif g.Keys[key] == GameKeys.FOURKEY:
		g.Keys[key] = "4"
	elif g.Keys[key] == GameKeys.FIVEKEY:
		g.Keys[key] = "5"
	elif g.Keys[key] == GameKeys.SIXKEY:
		g.Keys[key] = "6"
	elif g.Keys[key] == GameKeys.SEVENKEY:
		g.Keys[key] = "7"
	elif g.Keys[key] == GameKeys.EIGHTKEY:
		g.Keys[key] = "8"
	elif g.Keys[key] == GameKeys.NINEKEY:
		g.Keys[key] = "9"
	elif g.Keys[key] == GameKeys.UPARROWKEY:
		g.Keys[key] = "Up Arrow"
	elif g.Keys[key] == GameKeys.DOWNARROWKEY:
		g.Keys[key] = "Down Arrow"
	elif g.Keys[key] == GameKeys.LEFTARROWKEY:
		g.Keys[key] = "Left Arrow"
	elif g.Keys[key] == GameKeys.RIGHTARROWKEY:
		g.Keys[key] = "Right Arrow"
	elif g.Keys[key] == GameKeys.LEFTCTRLKEY:
		g.Keys[key] = "Left Control"
	elif g.Keys[key] == GameKeys.RIGHTCTRLKEY:
		g.Keys[key] = "Right Control"
	elif g.Keys[key] == GameKeys.RIGHTALTKEY:
		g.Keys[key] = "Right Alt"
	elif g.Keys[key] == GameKeys.LEFTALTKEY:
		g.Keys[key] = "Left Alt"
	elif g.Keys[key] == GameKeys.LEFTSHIFTKEY:
		g.Keys[key] = "Left Shift"
	elif g.Keys[key] == GameKeys.RIGHTSHIFTKEY:
		g.Keys[key] = "Right Shift"
	elif g.Keys[key] == GameKeys.PAD0:
		g.Keys[key] = "NumPad 0"
	elif g.Keys[key] == GameKeys.PAD1:
		g.Keys[key] = "NumPad 1"
	elif g.Keys[key] == GameKeys.PAD2:
		g.Keys[key] = "NumPad 2"
	elif g.Keys[key] == GameKeys.PAD3:
		g.Keys[key] = "NumPad 3"
	elif g.Keys[key] == GameKeys.PAD4:
		g.Keys[key] = "NumPad 4"
	elif g.Keys[key] == GameKeys.PAD5:
		g.Keys[key] = "NumPad 5"
	elif g.Keys[key] == GameKeys.PAD6:
		g.Keys[key] = "NumPad 6"
	elif g.Keys[key] == GameKeys.PAD7:
		g.Keys[key] = "NumPad 7"
	elif g.Keys[key] == GameKeys.PAD8:
		g.Keys[key] = "NumPad 8"
	elif g.Keys[key] == GameKeys.PAD9:
		g.Keys[key] = "NumPad 9"
	elif g.Keys[key] == GameKeys.PADPERIOD:
		g.Keys[key] = "NumPad Period"
	elif g.Keys[key] == GameKeys.PADSLASHKEY:
		g.Keys[key] = "NumPad Slash"
	elif g.Keys[key] == GameKeys.PADASTERKEY:
		g.Keys[key] = "NumPad Asterisk"
	elif g.Keys[key] == GameKeys.PADMINUS:
		g.Keys[key] = "NumPad Minus"
	elif g.Keys[key] == GameKeys.PADENTER:
		g.Keys[key] = "NumPad Enter"
	elif g.Keys[key] == GameKeys.PADPLUSKEY:
		g.Keys[key] = "NumPad Plus"
	elif g.Keys[key] == GameKeys.F1KEY:
		g.Keys[key] = "F1"
	elif g.Keys[key] == GameKeys.F2KEY:
		g.Keys[key] = "F2"
	elif g.Keys[key] == GameKeys.F3KEY:
		g.Keys[key] = "F3"
	elif g.Keys[key] == GameKeys.F4KEY:
		g.Keys[key] = "F4"
	elif g.Keys[key] == GameKeys.F5KEY:
		g.Keys[key] = "F5"
	elif g.Keys[key] == GameKeys.F6KEY:
		g.Keys[key] = "F6"
	elif g.Keys[key] == GameKeys.F7KEY:
		g.Keys[key] = "F7"
	elif g.Keys[key] == GameKeys.F8KEY:
		g.Keys[key] = "F8"
	elif g.Keys[key] == GameKeys.F9KEY:
		g.Keys[key] = "F9"
	elif g.Keys[key] == GameKeys.F10KEY:
		g.Keys[key] = "F10"
	elif g.Keys[key] == GameKeys.F11KEY:
		g.Keys[key] = "F11"
	elif g.Keys[key] == GameKeys.F12KEY:
		g.Keys[key] = "F12"
	elif g.Keys[key] == GameKeys.ACCENTGRAVEKEY:
		g.Keys[key] = "@"
	elif g.Keys[key] == GameKeys.BACKSLASHKEY:
		g.Keys[key] = "Back Slash"
	elif g.Keys[key] == GameKeys.BACKSPACEKEY:
		g.Keys[key] = "Back Space"
	elif g.Keys[key] == GameKeys.COMMAKEY:
		g.Keys[key] = "Comma"
	elif g.Keys[key] == GameKeys.DELKEY:
		g.Keys[key] = "Delete"
	elif g.Keys[key] == GameKeys.ENDKEY:
		g.Keys[key] = "End"
	elif g.Keys[key] == GameKeys.EQUALKEY:
		g.Keys[key] = "="
	elif g.Keys[key] == GameKeys.HOMEKEY:
		g.Keys[key] = "Home"
	elif g.Keys[key] == GameKeys.INSERTKEY:
		g.Keys[key] = "Insert"
	elif g.Keys[key] == GameKeys.LEFTBRACKETKEY:
		g.Keys[key] = "["
	elif g.Keys[key] == GameKeys.MINUSKEY:
		g.Keys[key] = "-"
	elif g.Keys[key] == GameKeys.PAGEDOWNKEY:
		g.Keys[key] = "Page Down"
	elif g.Keys[key] == GameKeys.PAGEUPKEY:
		g.Keys[key] = "Page Up"
	elif g.Keys[key] == GameKeys.PAUSEKEY:
		g.Keys[key] = "Pause"
	elif g.Keys[key] == GameKeys.PERIODKEY:
		g.Keys[key] = "."
	elif g.Keys[key] == GameKeys.QUOTEKEY:
		g.Keys[key] = "Quote"
	elif g.Keys[key] == GameKeys.RIGHTBRACKETKEY:
		g.Keys[key] = "]"
	elif g.Keys[key] == GameKeys.RETKEY:
		g.Keys[key] = "Enter"
	elif g.Keys[key] == GameKeys.SEMICOLONKEY:
		g.Keys[key] = "Semi Colon"
	elif g.Keys[key] == GameKeys.SLASHKEY:
		g.Keys[key] = "Forward Slash"
	elif g.Keys[key] == GameKeys.SPACEKEY:
		g.Keys[key] = "Space"
	elif g.Keys[key] == GameKeys.TABKEY:
		g.Keys[key] = "Tab"

Oh, wow! I guess this is the longest Way. :smiley:
My Script does nearly the same as Yours, but it can’t give new Names. But give me a Second. … …
Ok, here is an other Tryout:

import GameLogic as GL, GameKeys as GK

Cont = GL.getCurrentController()
Own = Cont.getOwner()
Sens = Cont.getSensors()[0]

KeyDict =	{GK.AKEY : "This is the A Key",
			GK.BKEY : "This is the B Key",
			GK.SPACEKEY : "Hey! Don't touch my Space Key!"}

if Sens.isPositive():
	Key = Sens.getCurrentlyPressedKeys()[0][0]
	
	if Key in KeyDict.keys():
		KeyName = KeyDict[Key]
	
	else:
		KeyName = filter(lambda k: getattr(GK,k)==Key,dir(GK))[0]
		
		if KeyName.endswith("KEY"):
			KeyName = KeyName[:-3]
	
	print KeyName

All new Names are stored in a Dictionary named KeyDict. If there is a new Name, it will used, if not, the Name will be searched in der GameKeys Modul. Finally, if the Name is ending with “KEY”, it will be cut. With this Way, it’s not necessary to define all Keys new.
It’s just a quick Tryout, maybe this give You some Inspiration. :smiley:
Doc

I believe the easiest way of getting a string from the key is to convert the ASCII code of the key to a char

code needed:

chr(key[0])

Full example:


#---------------This code is from the game engine documentation
#http://www.blender.org/modules/documentation/pydoc_gameengine/PyDoc-Gameengine-2.34/GameKeys-module.html

# Do the all keys thing
import GameLogic
import GameKeys

# status: these should be added to a module somewhere
KX_NO_INPUTSTATUS = 0
KX_JUSTACTIVATED = 1
KX_ACTIVE = 2
KX_JUSTRELEASED = 3
               
co = GameLogic.getCurrentController()
# 'Keyboard' is a keyboard sensor
sensor = co.getSensor('Keyboard')
keylist = sensor.getPressedKeys()
for key in keylist:
# key[0] == GameKeys.keycode, key[1] = status
	if key[1] == KX_JUSTACTIVATED:
	#----------This code converts from the ASCII code to the char
	print chr(key[0])

Have fun :slight_smile:

Very interesting discussion. I learned a lot. I didn’t know about filter, lambda, or the chr in python.