簡體   English   中英

如何檢測何時釋放了密鑰(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-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM