c++ 如何在SDL中处理大写键击?

xfb7svmp  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(110)

如何让SDL理解敲击字母时开启和关闭 * 大写锁定 *、shift + 'a' = 'A'shift + '1' = '!' 等之间的区别?

0md85ypi

0md85ypi1#

首先添加此命令:

SDL_EnableUNICODE(SDL_ENABLE);

字符串
这基本上允许SDL识别大写和小写之间的差异,甚至是持有Shiftand和字符之间的差异(如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;
}

8ljdwjyq

8ljdwjyq2#

SDL不再支持SDL_EnableUNICODE()。以下是如何使用SDL 2-from the wiki获取区分大写字母和小写字母的文本输入:

#include "SDL.h"

extern char *text;

int main(int argc, char *argv[])
{
    SDL_bool done = SDL_FALSE;

    SDL_StartTextInput();
    while (!done) {
        SDL_Event event;
        if (SDL_PollEvent(&event)) {
            switch (event.type) {
                case SDL_TEXTINPUT:
                    /* Add new text onto the end of our text */
                    strcat(text, event.text.text);
                    break;
            }
        }
 
    }
    SDL_StopTextInput();
    return 0;
}

字符串

相关问题