gpt4 book ai didi

c++ - SDL 运动停止

转载 作者:行者123 更新时间:2023-11-30 01:51:20 24 4
gpt4 key购买 nike

我正在使用 SDL 和 C++ 构建一个太空射击游戏,到目前为止,该运动正在运行。问题是,如果我按下,让我们说 UP 并添加 RIGHT 键(现在我同时按下 UP 和 RIGHT),船会在短时间内保持静止。

当它向上 + 向右移动时也会发生同样的情况,如果我松开第二个按下的键,移动就会停止,我必须再次按下按键才能开始。

我猜是按住和添加按键有问题。如果有人能告诉我在哪里看,那就太好了。

我正在使用 SDL2。

Uint8 const *keystate = SDL_GetKeyboardState(NULL);

keystate = SDL_GetKeyboardState(NULL);
while(exit == false) {
if( SDL_PollEvent(&event) != 0 ) {
if(event.type == SDL_QUIT) {
exit = true;
}
if (keystate[SDL_SCANCODE_LEFT] ) {
ship.move(-2, 0);
}
if (keystate[SDL_SCANCODE_RIGHT] ) {
ship.move(2, 0);
}
if (keystate[SDL_SCANCODE_UP] ) {
ship.move(0, -2);
}
if (keystate[SDL_SCANCODE_DOWN] ) {
ship.move(0, 2);
}
if (keystate[SDL_SCANCODE_SPACE]) {
ship.shoot();
}
}
SDL_BlitSurface(ship.getSurface(), NULL, surface, ship.getRect());
SDL_UpdateWindowSurface( window );
SDL_FillRect(surface, NULL, 0);
}

它不是由类似的东西修复的:

if (keystate[SDL_SCANCODE_DOWN] && keystate[SDL_SCANCODE_RIGHT) {
ship.move(2, 2);
}

最佳答案

SDL_PollEvent 在按键状态改变时触发,我相信如果您按住按键,您会根据按键重复率获得事件。您应该将键盘检查代码移到 if( SDL_PollEvent(&event) != 0 ) 之外:

while(exit == false) {
if( SDL_PollEvent(&event) != 0 ) {
if(event.type == SDL_QUIT) {
exit = true;
}
}

// you may need to take into account elapsed time to achieve constant speed
// regardless of frame rate
if (keystate[SDL_SCANCODE_LEFT] ) {
ship.move(-2, 0);
}
if (keystate[SDL_SCANCODE_RIGHT] ) {
ship.move(2, 0);
}
if (keystate[SDL_SCANCODE_UP] ) {
ship.move(0, -2);
}
if (keystate[SDL_SCANCODE_DOWN] ) {
ship.move(0, 2);
}
if (keystate[SDL_SCANCODE_SPACE]) {
ship.shoot();
}

SDL_BlitSurface(ship.getSurface(), NULL, surface, ship.getRect());
SDL_UpdateWindowSurface( window );
SDL_FillRect(surface, NULL, 0);
}

另请阅读 the doc ,您的代码在那里被明确命名为错误,并提供了正确代码的示例。

关于c++ - SDL 运动停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26235149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com