2

を使用SDLして 2D ゲームを作成しc++ていますが、一部のキーの組み合わせが機能しないことがわかりました。

たとえば、左矢印キーと上矢印キーを押したままにするとSDL、右矢印キーが押されたことを認識しません。いくつかの調査の結果、これはおそらくキーのブロックまたはゴーストが原因であり、解決策がないことがわかりました.

他のプログラマーはこれをどのように回避しますか?

ほとんどの既存のゲームをプレイしている間、この制限に遭遇したことはありません。Javaでこの問題に遭遇したことはありません。

コードのサンプルを次に示します。

while(SDL_PollEvent(&event))
{

    if(event.type == SDL_KEYDOWN)
    {
        switch(event.key.keysym.sym)
        {
            case SDLK_UP:
                std::cout << "Up pressed" << std::endl;
            break;
            case SDLK_DOWN:
                std::cout << "Down pressed" << std::endl;
            break;
            case SDLK_LEFT:
                std::cout << "Left pressed" << std::endl;
            break;
            case SDLK_RIGHT:
                std::cout << "Right pressed" << std::endl;
            break;
        }
    }
    else if(event.type == SDL_KEYUP)
    {
        switch(event.key.keysym.sym)
        {
            case SDLK_UP:
                std::cout << "Up released" << std::endl;
            break;
            case SDLK_DOWN:
                std::cout << "Down released" << std::endl;
            break;
            case SDLK_LEFT:
                std::cout << "Left released" << std::endl;
            break;
            case SDLK_RIGHT:
                std::cout << "Right released" << std::endl;
            break;
        }
    }
}
4

1 に答える 1

1

これはキーボード固有のものであるため、実際にはこれを回避する方法はありません。たとえば、ラップトップのキーボードでは、特定のキーが押された場合、一度に特定の数のキーしか押すことができません。

一度に押さなければならないキーの数を減らすこともできますが、難しいでしょう。

于 2013-04-27T03:07:24.130 に答える