SDL又坑到我了(关于SDL_keydown事件)
sdl吧
全部回复
仅看楼主
level 5
刚接触SDL,对它的很多东西不了解,就比如今天遇到的这个键盘keydown事件,我写事件之前就大概看了下相关文档,感觉键盘事件应该都是触发型的,就是说一摁下键盘就产生一个事件……对……一定是这样的----只产生一个事件[不高兴],然后松开键盘又产生一个事件,这多美好!,于是我天真的开始了码代码于是……破事来了~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我这程序(实现人物行走)大概套路就是在事件循环中检测键盘,按下相应键时,就渲染一个相应的动作初始图,并启动另一线程渲染连续的动作图和位移,直到keyup就终止,然而测试的时候发现一摁住键盘,人物确实是动了,但是……尼玛一闪一闪是怎么回事,不应该是均匀、协调而连续的优美的动作图吗,于是我就疯狂的摁,然后思考,再疯狂的摁,然后思考……终于悟出一个真理~~~~~摁住键盘不是产生一个事件而是千千万万个事件(夸张手法),之所以一闪一闪,是因为电脑在高速的绘制动作初始图(不停地在执行产生keydown时应执行的动作)
2017年04月19日 02点04分 1
level 13
sdl官方有介绍,关于渲染,获取事件之类的都应该放到主线程中
2017年04月19日 05点04分 2
是吗?我不太了解,我做渲染的那个线程是定时器产生的,这样感觉帧数较稳定可控,主线程就用来pollevent查询事件,再根据键值来确定按键来决定相应操作
2017年04月19日 06点04分
@时光剑寂寞刀 。。。让帧数稳定可以添加垂直同步,基本稳定在60fps
2017年04月19日 06点04分
level 13
还有,按键获取有几种方式的,你是怎么获取的?
2017年04月19日 05点04分 3
有几种?这么厉害,我还真不知道,求赐教!
2017年04月19日 06点04分
回复 时光剑寂寞刀 : switch(SDL_PollEvent(&e)) { case SDLK_DOWN: //忘了, } 回去帮你找找
2017年04月19日 06点04分
level 4
const Uint8 *state = SDL_GetKeyboardState(NULL);
if (state[SDL_SCANCODE_RETURN])
{
printf("<RETURN> is pressed.\n");
}
if (state[SDL_SCANCODE_RIGHT] && state[SDL_SCANCODE_UP])
{
printf("Right and Up Keys Pressed.\n");
}
2017年05月23日 10点05分 6
[吐舌]这个是吧
2017年05月23日 10点05分
1