我正在制作乒乓球游戏,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;
}
}
知道如何解决这个问题并使其顺利进行吗?
最佳答案
最好使用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);
}
此外,我可以建议设置一个速度变量吗?使用像素不是缩放运动的好方法,因为它取决于屏幕的分辨率。使用基于时间步长的东西要稳健得多。
关于c++ - SDL 僵硬运动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33112758/