按 s 或 d 时的移动速度比按 w 或 s 时更慢。 SDL2c

问题描述 投票:0回答:1
    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;
c windows-subsystem-for-linux game-development game-physics sdl-2
1个回答
0
投票

您使用屏幕宽度作为播放器速度,这是一个不好的做法,因为如果屏幕比其高度宽,则从一侧到另一侧所需的时间会更长,因为像素更多。将playerSpeed 设置为固定值。

© www.soinside.com 2019 - 2024. All rights reserved.