Input 文本编辑器的键盘输入
我正在制作一个文本编辑器,通过SDL2使用OpenGL进行渲染。我使用SDL_K switch语句获取键盘输入:Input 文本编辑器的键盘输入,input,sdl,sdl-2,Input,Sdl,Sdl 2,我正在制作一个文本编辑器,通过SDL2使用OpenGL进行渲染。我使用SDL_K switch语句获取键盘输入: if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_CLOSE) { should_run = 0; break; } else if (event.type == SDL_KEYDOWN) { switch (event.key.keysym.s
if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_CLOSE) {
should_run = 0;
break;
}
else if (event.type == SDL_KEYDOWN)
{
switch (event.key.keysym.sym)
{
case SDLK_a:
add_character(&test_element, 'a');
break;
case SDLK_b:
add_character(&test_element, 'b');
break;
case SDLK_c:
add_character(&test_element, 'c');
break;
case SDLK_d:
add_character(&test_element, 'd');
break;
case SDLK_LEFT:
move_cursor(&test_element, -1);
break;
case SDLK_RIGHT:
move_cursor(&test_element, 1);
break;
}
}
对于整个键盘,我将有两个写很多开关盒。有更好的方法吗?是的,有更好的方法。使用,它将为用户键入的内容提供UTF-8表示形式。好的,我查看了SDLKey值: 它们实际上是各自字符的ascii值,因此我可以将event.key.keysim.sim直接输入到我的add_character函数中,如果我在上一帧中按下左shift键,则调整为-32:
int kbshift = 0;
for (should_run = 1; should_run; ) {
if (timer_diff > FRAME_TIME){
timer_start = clock();
SDL_Event event;
while (SDL_PollEvent(&event)) {
if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_CLOSE) {
should_run = 0;
break;
}
else if (event.type == SDL_KEYDOWN)
{
if (event.key.keysym.sym >= 32 && event.key.keysym.sym <= 127)
{
if (kbshift)
add_character(&test_element, event.key.keysym.sym - 32);
else
add_character(&test_element, event.key.keysym.sym);
}
switch (event.key.keysym.sym)
{
case SDLK_LSHIFT:
kbshift = 1;
break;
case SDLK_LEFT:
move_cursor(&test_element, -1);
break;
case SDLK_RIGHT:
move_cursor(&test_element, 1);
break;
}
}
else if (event.type == SDL_KEYUP)
{
switch (event.key.keysym.sym)
{
case SDLK_LSHIFT:
kbshift = 0;
break;
}
}
}
Update();
}
timer_end = clock();
timer_diff = ((double) (timer_end - timer_start)) / CLOCKS_PER_SEC;
}
int-kbshift=0;
for(should_run=1;should_run;){
如果(计时器差异>帧时间){
计时器启动=时钟();
SDL_事件;
while(SDL_事件和事件)){
if(event.type==SDL\u WINDOWEVENT&&event.window.event==SDL\u WINDOWEVENT\u CLOSE){
应该运行=0;
打破
}
else if(event.type==SDL\u KEYDOWN)
{
如果在相关注释中(event.key.keysym.sym>=32&&event.key.keysym.sym Big'olestd::map
ofSDLK.*
enum values tostd::function
s:),您应该标记一种语言并定义“better”。@genpfault好的,我会尝试一下,谢谢