2011-10-08 131 views
2

我想在GTK +中接收键盘和鼠标输入。对于键盘输入,我尝试使用加速组,但它不像SDL或SFML那样流畅。当我按下一个键。它响应,暂停了一段时间,再次作出反应,停顿了一段时间,等等。通过鼠标输入我的意思是在给定的时间获取鼠标的位置以及是否单击鼠标按钮。通过键盘输入,我想跟踪按键和释放。我正在使用GTK +和开罗进行教育图形计划。有点像海龟图形。任何帮助?或任何与GTK +一起使用并跟踪键盘和鼠标输入的第三方库(C或C++)?如何在GTK中获得键盘和鼠标输入?

+0

我认为GTK可能是这个职位的错误的工具......听起来像你应该寻找游戏编程库。 – ptomato

+0

@DeMix对不起,对标签。自从我提到第三方_C_或_C++ _库以来,我认为应该包含C++和C标记。 – ApprenticeHacker

+0

如果你不太深入这个项目,你可以看看Qt。它没有任何问题(不是我所知道的)将它用作游戏引擎。 – RushPL

回答

2

你想要做的是比较复杂的。看看

http://developer.gnome.org/gtk-tutorial/2.90/

和特别是在

http://developer.gnome.org/gtk-tutorial/2.90/x344.html

http://developer.gnome.org/gtk-tutorial/2.90/c2422.html

第二个环节有一个键盘回调,似乎做你想做的源代码。第三个链接是使用鼠标的简单绘图程序教程的开始。

编辑:为了完整起见,我会提到gtkglext库支持在GTK +中使用OpenGL。见

http://projects.gnome.org/gtkglext/

+0

呃,你可能想提一下,gtkglext只是Gtk2。 Gtk2不再维护,和/或ApprenticeHacker可能会使用Gtk3。 [GtkGLArea](https://developer.gnome.org/gtk3/stable/GtkGLArea.html)是当前使用GL与Gtk一起使用的方式。 – theGtknerd

0

根据文档] 1你可以得到鼠标移动事件,设置它们的掩码为GDK_POINTER_MOTION_MASK - 这意味着即使没有按钮被按下,你也会得到运动事件。另外,Gtk+ tutorials显示了利用鼠标移动事件的一些概念。

当我按下一个键。它响应,暂停了一段时间,再次作出反应,停顿了一段时间,等等。

这是什么意思?我想,你所描述的键重复的行为(与在文本编辑器,当你按下“a”和持有它,你就会得到“aaaaaaaaaaaaa” To disable it in your app

XKeyboardControl control; 
control.auto_repeat_mode = 0; 

gdk_error_trap_push(); 
XChangeKeyboardControl (GDK_DISPLAY(), KBAutoRepeatMode, &control); 
gdk_error_trap_pop(); 
+0

由此我的意思是关键重复是不一致的,就像在SFML和SDL中一样。如果您在SDL中移动精灵,它会一致移动,因为isKeyPressed()总是计算为true,直到您释放该键为止。但是在GTK +中,如果你持有一个键,它会移动,然后停止,然后再次移动,然后停止,然后移动......即isKeyPressed()的结果为真,然后是假,然后是真。然后假一秒,然后再次为真。我知道,很难解释对不起。 – ApprenticeHacker

相关问题