我正在做一个乒乓球游戏,lPad是左边的垫子而rPad是正确的垫子,但是我有一个问题,当任何垫子向上移动时,当我释放向上按钮并按下垫子停止一段时间然后下降,另一件事是,当按下这两个控件(只有一个正在移动)时,我无法移动两个打击垫:
if(e.type == SDL_KEYDOWN) {
switch(e.key.keysym.sym) {
case SDLK_s:
lPad.y += 8;
if(lPad.y >= s.SCREEN_HEIGHT - lPad.getHeight()) {
lPad.y = s.SCREEN_HEIGHT - lPad.getHeight();
}
break;
case SDLK_w:
lPad.y -= 8;
if(lPad.y <= 0) {
lPad.y = 0;
}
break;
case SDLK_DOWN:
rPad.y += 8;
if(rPad.y >= s.SCREEN_HEIGHT - rPad.getHeight()) {
rPad.y = s.SCREEN_HEIGHT - rPad.getHeight();
}
break;
case SDLK_UP:
rPad.y -= 8;
if(rPad.y <= 0) {
rPad.y = 0;
}
break;
default:
break;
}
}
任何想法如何解决这个问题并使其顺利进行?
答案 0 :(得分:1)
最好使用SDL_GetKeyboardState(NULL)
作为获取输入的函数。这样,您可以同时获得键盘的整个状态,从而允许并行输入。如果您使用while
循环,则每个事件都会被单独捕获,因此会不稳定。
以下是一些如何使用它的示例代码:
const auto * keys = SDL_GetKeyboardState(NULL);
while(!done) {
while(SDL_PollEvent(&e)) {
if(e.type == SDL_QUIT) {
done = true;
}
}
SDL_PumpEvents();
if (keys[SDL_SCANCODE_UP]) {
p1.set_speed(0, -60000 * delta.count());
}
if (keys[SDL_SCANCODE_DOWN]) {
p1.set_speed(0, 60000 * delta.count());
}
if (keys[SDL_SCANCODE_LEFT]) {
p1.set_speed(-60000 * delta.count(), 0);
}
if (keys[SDL_SCANCODE_RIGHT]) {
p1.set_speed(60000 * delta.count(), 0);
}
另外,我可以建议使用速度变量吗?使用像素不是缩放移动的好方法,因为它取决于屏幕的分辨率。使用基于时间步长的东西会更加健壮。