如何检测键何时被释放(SDL 2.0)
How can I detect when a key has been released (SDL 2.0)
我在检测键何时被释放时遇到问题。如果我打电话:
csdl_setup->GetMainEvent()->key.keysym.sym == SDLK_UP
SDLK_UP在2-3秒左右是不正确的,这对于键盘驱动的菜单来说是低效的。我希望能够在SDL中轻松滚动我的菜单。
有人能帮我吗?SDL_Event event;
while (SDL_PollEvent(&event) && event.key.repeat == 0 && some_sprite->GetY() == coords[1] && event.type == SDL_KEYDOWN)
{
some_sprite->SetY(coords[1] + 20);
}
SDL_PollEvent(&event);
if (event.key.repeat == 0 && some_sprite->GetY() == coords[3])
{
if(some_sprite->GetY() == coords[3] && event.type == SDL_KEYDOWN)
{
some_sprite->SetY(coords[3] + 20);
}
cout << "Event Key Repeat = " << event.key.repeat << endl;
}
您应该在事件发生时进行处理。您的代码使用对SDL_PollEvent()的多次调用,甚至在某些情况下短路轮询。
将所有事件处理代码移动到while循环中。删除while循环上的额外检查,以便在处理所有事件之前保持在循环中。
对代码的快速修改可能看起来像这样:
SDL_Event event;
while (SDL_PollEvent(&event))
{
if(event.type == SDL_KEYDOWN)
{
if(event.key.repeat == 0)
{
if(some_sprite->GetY() == coords[1])
some_sprite->SetY(coords[1] + 20);
else if(some_sprite->GetY() == coords[3])
some_sprite->SetY(coords[3] + 20);
}
cout << "Event Key Repeat = " << event.key.repeat << endl;
}
}
相关文章:
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 释放错误后堆使用
- G锁定铸造到基础上会释放模拟行为
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- 在将变量声明为引用时,堆在释放后使用
- SDL 窗口不会弹出
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- SDL 操纵杆按钮按下/C++
- C++双重释放或损坏(out)
- 如何在c++中释放内存
- 使用全局声明的向量时,C++双重释放错误/损坏
- VSCode IntelliSense无法识别SDL框架的SDL_image扩展库
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 为什么瓦尔格林德在不释放恶意内存后没有报告任何问题?
- 调用析构函数以释放动态分配的内存
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- SDL在析构函数上释放曲面失败
- 如何检测键何时被释放(SDL 2.0)
- 释放有效的SDL曲面会导致分段故障