From: Frank W. S. <fr...@me...> - 2011-06-11 14:00:14
|
I am interested in using vpython to make some simple games. Apparently there are a few others like me based on some internet posts that I found. To make games we need to know when keyboard buttons are released as well as pressed. To facilitate this happening, I made a couple small code changes represented by the below patch on the visual-5.71 release. You are welcome to incorporate or ignore them. When keys are released, the generated keyboard events are proceeded with the string "Released: " in front of them. The good: -The patch is very small -This hack is backwards compatible for people who use code like s = scene.kb.getkey() if s == 'k': ... -Processing of keyboard events is still easy string comparisons The bad: -The code is currently only for gtk. I don't have "Windows" or Mac computer on which to test any change that I make. Thanks for all your work on vpython. It's great. -Frank --- src/gtk2/display.cpp.~1.58.~ 2009-10-11 17:33:43.000000000 -0400 +++ src/gtk2/display.cpp 2011-06-11 07:24:54.176217104 -0400 @@ -133,6 +133,8 @@ area->set_size_request( w, h ); area->signal_key_press_event().connect( sigc::mem_fun( *this, &display::on_key_pressed)); + area->signal_key_release_event().connect( + sigc::mem_fun( *this, &display::on_key_pressed)); // Glade-based UI. // Turned off toolbar in display initialization for now; not yet available on Windows or Mac @@ -270,6 +272,11 @@ // other than a US keyboard. guint k = key->keyval; std::string ctrl_str; + + // Is this a press or release? + if (key->type == GDK_KEY_RELEASE) { + ctrl_str += "Released: "; + } // First trap for shift, ctrl, and alt. if (key->state & GDK_CONTROL_MASK) { ctrl_str += "ctrl+"; |