首页 > 解决方案 > 如何在sdl中同时使用键盘的两个键

问题描述

我正在用 SDL 用 C 语言编写一个简单的游戏,并且我已经定义了玩家一用键盘的箭头键控制它是_例如_坦克,而玩家二控制它是坦克,用键“W”、“A”、“S”,键盘的“D”。

我的问题是他们不能同时按键。

我有一个名为“handle_events”的函数,它控制游戏中无限期的事件,它的代码如下:

int handle_events(Tank* tank,Tank* tanker, Wall walls[]){
    SDL_Event event;
    while (SDL_PollEvent(&event)) {
        if (event.type == SDL_QUIT)
            return EXIT;
        if (event.type == SDL_KEYDOWN){
            if(event.key.keysym.sym==SDLK_UP){
                move_tank_forward(tank,colliding(tank,walls));
            }else if(event.key.keysym.sym==SDLK_DOWN){
                move_tank_back(tank,colliding(tank,walls));
            } else if(event.key.keysym.sym==SDLK_RIGHT || event.key.keysym.sym==SDLK_LEFT) {
                turn_tank(event.key.keysym.sym, tank);
            } else if(event.key.keysym.sym==SDLK_w){
                move_tank_forward(tanker,colliding(tanker,walls));
            } else if (event.key.keysym.sym==SDLK_s){
                move_tank_back(tanker,colliding(tanker,walls));
            } else if(event.key.keysym.sym==SDLK_d || event.key.keysym.sym==SDLK_a){
                turn_tank(event.key.keysym.sym, tanker);
            }

        }

我正在寻找一种两个玩家可以同时玩的方式,因为现在如果两个玩家同时按下向上键和 w 键,他们都无法移动他们的坦克。

标签: csdl

解决方案


在 Windows 上,您可以使用GetAsyncKeyState()函数。

对于 Linux 上的等价物,请参阅此问题


推荐阅读