3

Caps Lock オンと Caps Lock オフ、またはShift + 'a' = 'A'またはそのShift + '1' = '!'で文字をタップすることの違いを SDL に理解させる方法 ...等?

4

1 に答える 1

0

最初に次のコマンドを追加します。 SDL_EnableUNICODE(SDL_ENABLE); これにより、基本的に SDL は大文字と小文字の違い、さらには Shift と aa 文字 (shift + 'a' = 'A' または shift + '1' = '!' など) の違いを認識できるようになります。 、通常のキー( event.key.keysym.sym)を抽出する方法を知っていると仮定して、event.key.keysym.unicode代わりに使用してください

例えば:

#include <string>
#include <iostream>
using namespace std;

string stringinput()
{
    string input;
    SDL_EnableUNICODE( SDL_ENABLE );
    SDL_Event uin;
    while(!(uin.type==SDL_KEYDOWN&&uin.key.keysym.sym==SDLK_RETURN))
    {
        while(SDL_PollEvent(&uin))
        {
            if(uin.type==SDL_KEYDOWN)
            {
                if((uin.key.keysym.unicode>='A'&&uin.key.keysym.unicode<='Z')
                ||(uin.key.keysym.unicode>='a'&&uin.key.keysym.unicode<='z')
                ||(uin.key.keysym.unicode>='0'&&uin.key.keysym.sym<='9')
                ||(uin.key.keysym.unicode==SDLK_SPACE))
                {
                    input+=((char)uin.key.keysym.unicode);
                }
                else
                {
                    switch((unsigned int)uin.key.keysym.unicode)
                    {
                    case SDLK_BACKSPACE:
                        input.erase(input.size()-1);
                    break;
                    }
                }
            }
        }
    }
    SDL_EnableUNICODE( SDL_DISABLE );
    return input;
}
int main()
{
    string mystring=stringinput();
    cout<<mystring;
    while(1);
    return 0;
}
于 2013-07-22T20:36:53.897 に答える