[英]How can I detect when a key has been released (SDL 2.0)
我在檢測何時釋放密鑰時遇到問題。 如果我打電話給:
csdl_setup->GetMainEvent()->key.keysym.sym == SDLK_UP
SDLK_UP在大約2-3s內不會正確,這對於鍵盤驅動的菜單而言效率不高。 我希望能夠在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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.