だから、私は C でチョップリフターをコーディングしています。私の質問は、SDL で同時に押された 2 つのキーをどのように管理できますか? 2 つのスイッチで試しましたが、何もすることがありません。動作しません :/
SDLでそれを行うことは可能ですか?
だから、私は C でチョップリフターをコーディングしています。私の質問は、SDL で同時に押された 2 つのキーをどのように管理できますか? 2 つのスイッチで試しましたが、何もすることがありません。動作しません :/
SDLでそれを行うことは可能ですか?
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.
これを行うとき、個人的には 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;
}
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 ファイルにあります。