在SDL和c++中处理关键事件
Handling key events in SDL and C++
我正在将一个程序从GLUT迁移到SDL。在我当前的程序中,按a
键导致不同的响应,然后按A
键。这在GLUT中非常简单,因为键盘函数回调传递了所按键的ASCII值。
void keyPressedFn(unsigned char key, int x, int y){
switch(key){
case 'a':
// do work for a
break;
case 'A':
// do work for A
break;
}
}
我正在努力在SDL中复制类似的功能,因为按下a
键会产生相同的响应,无论SHIFT或CAPS LOCK是否也按下。
是否有一种简单的方法在SDL中复制上述函数?
Edit:在上面的例子中,我只展示了如何处理一个键,但是在实践中,我将有一个大约15个键的列表,如果shift键被按下,我想以不同的方式响应。
检查获得keydown事件时出现的键盘修饰符。例如:
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_KEYDOWN:
if(event.key.keysym.sym == SDLK_a)
{
if(event.key.keysym.mod & KMOD_SHIFT)
{
// Handle 'A'
}
else
{
// Handle 'a'
}
}
break;
...
}
}
SDL_keysym
具有mod
字段,其中包含事件发出时修饰符键的状态。Bit-AND - it与KMOD_SHIFT
一起检查Shift是否已激活。
为什么不这样做呢?
void keyPressedFn(unsigned char key, int x, int y){
switch(key){
case 'a':
case 'A':
// do work for A or a
break;
}
}
你还有其他不能按照我的建议去做的事情吗?如果不是,我想这是最简单的了。
相关文章:
- 给定顺序中的事件处理
- C++事件系统 - 多态事件和事件处理程序
- wxWidgets 拖放文件事件处理程序初始化问题(无效static_cast)
- 更好的事件处理机制?
- 如何将IEnumerable与Process.Start的输出事件处理程序一起使用?
- "动态创建的事件处理程序"复选框
- Wxwidgets - 如何添加调整大小事件处理程序以使"X"绘图随窗口调整大小?
- Qt 键按事件处理程序仅在按下 ctrl、alt 或 shift 键时做出反应
- 类成员作为 C++ 中 C 样式事件的事件处理程序
- C 设计事件处理程序类
- 将托管事件处理程序传递给 Linux 中的非托管代码
- 如何在 c++ linux 中创建事件处理程序
- 解除 lambda 事件处理程序的绑定
- 这是MFC C 中单个选择的ComboBox的事件处理程序
- 审核的实时事件处理 C/C++
- 指纹读取器 - 从 C# 代码创建事件处理程序到C++的问题
- 为什么我的Windows控制台关闭事件处理程序超时
- 无法让 matplotlib 事件处理程序与 Boost.Python 一起工作
- 事件处理程序是Embarcadero C++Builder中的重入程序吗
- QTSCXML状态机中的事件处理