3

ここに問題があります。キーダウンイベントとキーアップイベントを検出するためのイベントループを作成しました。私が遭遇している問題は、キーが押されたままになっているときに、キーダウンイベントがキーダウンイベントとキーアップイベントを生成していることです。矢印キーを使用してオブジェクトを移動し、キーを離すと移動を停止します(keyup)。どんな助けでも助けになるでしょう。ありがとう。=)

ジャスティン

PSコードを投稿しますが、正しく表示されません。

print("         SDL_Event event;
    SDL_EnableKeyRepeat(0,0);
    while(SDL_PollEvent(&event)){
        switch(event.type){
        case SDL_QUIT:
            done = true;
            break;
        case SDL_KEYDOWN:
            switch(event.key.keysym.sym){
            case SDLK_ESCAPE:
                done = true;
                break;
            case SDLK_LEFT:
                animate_x = -5;
                cout << "left press\n";
                break;
            case SDLK_RIGHT:
                animate_x = 5;
                break;
            case SDLK_UP:
                animate_y = -5;
                break;
            case SDLK_DOWN:
                animate_y = 5;
                break;
            default:
                break;
            }
            break; -left out in original
        case SDL_KEYUP:
            switch(event.key.keysym.sym){
            case SDLK_LEFT:
                cout << "left up\n";
                animate_x = 0;
                break;
            case SDLK_RIGHT:
                animate_x = 0;
                break;
            case SDLK_UP:
                animate_y = 0;
                break;
            case SDLK_DOWN:
                animate_y = 0;
                break;
            default:
                break;
            }
            break; -left out in original
        }
    }");

コードを投稿する方法を理解しようとしているときに、2つのケースでデフォルトが省略されていることに気付きました。これでコードが機能します。ケースを調べ、キューにあるものと一致するコードを実行し続けました。愚かな私。すべての助けをありがとう。=)

4

2 に答える 2

3

キーリピートが有効になっているようです。無効にするには、使用します

SDL_EnableKeyRepeat(0, 0);
于 2008-11-30T10:48:08.747 に答える
3

SDL_GetKeyStateキーダウン/キーアップを追跡する代わりに使用したい場合があります。キーの瞬間的な状態を検出するために使用します。これを使用して、連続するフレームでキーが押されているかどうかを判断できます。

于 2008-12-01T05:50:40.127 に答える