NoUserOrg

Reto Spoerri : Game Design : Zürich

ProgrammingCodeSnippletsGet-pressed-keys

Filed in: Resources.ProgrammingCodeSnippletsGet-pressed-keys · Modified on : Fri, 31 Jul 09

get the currently pressed keys (not tested it myself yet)

new version

# from http://www.panda3d.org/phpbb2/viewtopic.php?t=4331
# by ynjh_jo
def getButton(key):
  if len(key)==1:
     kb=KeyboardButton.asciiKey(key)
  else:
     if hasattr(KeyboardButton,key): # keyboard button
        kb=getattr(KeyboardButton,key)()
     else:                           # mouse button
        kb=getattr(MouseButton,key)()
  return base.mouseWatcherNode.isButtonDown(kb) 

old version

# from http://www.panda3d.org/phpbb2/viewtopic.php?t=4331
# by ynjh_jo
from pandac.PandaModules import KeyboardButton, MouseButton

ALL_KEYS = [
    'a','b','c','d','e','f','g','h','i','j','k','l','m','n',
    'o','p','q','r','s','t','u','v','w','x','y','n','z',
    '`','0','1','2','3','4','5','6','7','8','9','-','=',
    '[',']','\\',';',"'",',','.','/',
    'f1','f2','f3','f4','f5','f6','f7','f8','f9','f10','f11','f12',
    'enter','escape','backspace','insert','home','tab','end','space',
    'shift','lshift','rshift',
    'control','lcontrol','rcontrol',
    'alt','lalt','ralt',
    'meta','_del','pause',
    '^','?','<','>','$',
#    '°','¨',
#    'caps_lock',
#    'arrow_left','arrow_up','arrow_down','arrow_right',
#    'page_down','page_up','num_lock','scroll_lock','delete',
#    'page_up',
#    "print_screen","scroll_lock","page_down","page_up","num_lock",
  ]

def getButton(key):
  if len(key)==1:
    kb=KeyboardButton.asciiKey(key)
  else:
    if hasattr(KeyboardButton,key): # keyboard button
      kb=getattr(KeyboardButton,key)()
    else:                           # mouse button
      kb=getattr(MouseButton,key)()
  return base.mouseWatcherNode.isButtonDown(kb)

from direct.showbase.DirectObject import DirectObject
class EventList(DirectObject):
  def __init__(self):
    DirectObject.__init__(self)
    taskMgr.add(self.readTask, 'readTask')
  def readTask(self, task):
    for eventName, eventParameters in messenger.findAll('').items():
      print event, eventParameters

eventList = EventList()

messenger.toggleVerbose()

# sample usage
if __name__ == '__main__':
  from direct.directbase import DirectStart
  '''def run():
    while True:
      taskMgr.step()
      for k in ALL_KEYS:
        if getButton(k):
          print k'''