const Uint8* keysState = SDL_GetKeyboardState(NULL);
float toMove = playerSpeed * dt;
if (keysState[SDL_SCANCODE_S]) {
player.y += toMove;
}
if (keysState[SDL_SCANCODE_D]) {
player.x += toMove;
}
if (keysState[SDL_SCANCODE_W]) {
player.y -= toMove;
}
if (keysState[SDL_SCANCODE_A]) {
player.x -= toMove;
}
当按下 a 键时,玩家大约需要一秒钟在屏幕上移动,但当我按 d 从左向右移动时,需要大约 3 秒才能在屏幕上移动。按 w 和 s 也有同样的问题。 += 运算符只是比 -= 慢吗? 游戏循环的粗略想法:
Uint32 lastTicks = SDL_GetTicks();
while (!quit) {
Uint32 nowTicks = SDL_GetTicks();
float dt = (nowTicks - lastTicks) / 1000.0f;
lastTicks = nowTicks;
update(dt);
}
我通过 wsl2 在 Linux 上运行这个
我尝试了不同的播放器速度,但问题仍然存在。 这是常数:
#define SCREEN_WIDTH 640*2
#define SCREEN_HEIGHT 640
#define BLOCK_SIZE (SCREEN_WIDTH / 20)
#define BOARD_HEIGHT (SCREEN_HEIGHT / BLOCK_SIZE)
#define BOARD_WIDTH (SCREEN_WIDTH / BLOCK_SIZE)
float playerSpeed = SCREEN_WIDTH;
您使用屏幕宽度作为播放器速度,这是一个不好的做法,因为如果屏幕比其高度宽,则从一侧到另一侧所需的时间会更长,因为像素更多。将playerSpeed 设置为固定值。