1

だから、私は C でチョップリフターをコーディングしています。私の質問は、SDL で同時に押された 2 つのキーをどのように管理できますか? 2 つのスイッチで試しましたが、何もすることがありません。動作しません :/

SDLでそれを行うことは可能ですか?

4

3 に答える 3

1

An example: If you were, say trying to read if both 'a' and 'b' were pressed at the same time, you could run a loop to check for events as usual and have Boolean values called a_true and b_true and check at the end of the loop if both are true. You could have a key pressed check to make them true and also a key released check to make them false. Without code I don't think anyone can give a more descriptive answer.

于 2013-02-22T03:18:03.460 に答える
0

これを行うとき、個人的には SDL_GetKeyState を使用して、次のコードのようなものを使用してキーボードの各キーを手動でチェックするのが好きです:

int *keystates;

keystates = SDL_GetKeyState(NULL);
if (keystates[SDLK_a]) {
    a_key_pressed = true;
} else {
    a_key_pressed = false;
}
if (keystates[SDLK_b]) {
    b_key_pressed = true;
} else {
    b_key_pressed = false;
}

SDL のすべてのキー名の完全なリストは、http: //www.libsdl.org/docs/html/sdlkey.html#AEN4720 で入手できます。

理想的には、これを次のように簡単にキーをチェックする関数にすることができます: (テストされていませんが、概念は正しいです)

BOOL CheckKey(int keyname) {
    int *keystates = SDL_GetKeyState(NULL);
    if (keystates[keyname]) {
        return TRUE;
    }
    return FALSE;
}
于 2013-02-26T21:35:35.493 に答える
0

CTRL と別のボタン (CTRL+A など) の押下をサポートしたい場合は、Unicode を使用できます。利点は、非常に使いやすく、AZERTY キーボードと互換性があることです。したがって、CTRL+何かをサポートできるようにするためにこれを行いたい場合は、これを使用することをお勧めします。ただし、他の用途では機能しないため、他の回答のいずれかを使用してください。これは、使用方法の例です。

switch(event.type){
    case SDL_KEYDOWN:
        SDL_EnableUNICODE(1);
        switch(event.key.keysym.unicode){
            case 1:   //CTRL+A
                //code
                break;
            case 97:  //A
                //code
                break;
        }
}

キーの各組み合わせのコードを取得するには、コードに何もないことを確認した後、プログラムにこのコードを記述します(または、ある場合は、キーの長い繰り返しが得られるため、SDL_EnableKeyRepeat一時的にその前に挿入します)。//同じコード):

fprintf(stderr,"%d",event.key.keysym.unicode);

問題の組み合わせのコードは、実行可能ファイルと同じフォルダーの stderr.txt ファイルにあります。

于 2016-07-06T12:31:59.080 に答える