SDL中的密钥重复延迟

我试图在按住键盘的同时在菜单中获得键盘延迟效果。 目前它可以工作,但不会在改变方向之后。 例如,我可以按住右键,光标世界右移,然后暂停,然后继续向右移动(如预期的那样)。 我可以释放并按右键或按住右键,它会工作。 按住左键不起作用,光标立即全速前进。 奇怪的是,如果我释放并保持左后,它的作品。 在此之后按住右键会使光标立即全速移动,并且像上面这样只会影响第一次。

这里是我正在处理的函数:(许多变量是全局的,o如果没有在函数中声明它是全局的)

int handleEvents() {
    static int lcount = 0;
    static int rcount = 0;
    while(SDL_PollEvent(&e)) {
        if(e.type == SDL_QUIT) end++; //quit code
        if(e.type == SDL_KEYDOWN) {
            switch (e.key.keysym.sym) {
                case SDLK_ESCAPE: end++; break;
                case SDLK_LEFT: lDown = 1; break;
                case SDLK_RIGHT: rDown = 1; break;
            }
        }
        if(e.type == SDL_KEYUP) {
            switch (e.key.keysym.sym) {
                case SDLK_LEFT: lDown = 0; break;
                case SDLK_RIGHT: rDown = 0; break;
            }
        }
    }

    int now = SDL_GetTicks();

    if (lDown && curLocation >  0 && (now-ltime > 1500 || (now-ltime > 250 && lcount>0))) {
        curLocation--;
        lcount++;
        ltime = SDL_GetTicks();
    }
    if (rDown && curLocation < 18 && (now-rtime > 1500 || (now-rtime > 250 && rcount>0))) {
        curLocation++;
        rcount++;
        rtime = SDL_GetTicks();
    }

    if (!lDown) {
        lcount = 0;
        ltime = now - 1500;
    }
    if (!rDown) {
        rcount = 0;
        rtime = now - 1500;
    }

    return 0;
}

在阅读本网站上的早期问题后,我找到了SDL_EnableKeyRepeat() 。 我找不到如何在程序中使用它的任何示例,但无论如何我都试过。 以下是相同功能的削减版本:

int handleEvents() {
    int mouseMotion = 0;
    SDL_EnableKeyRepeat(500, 250);
    while(SDL_PollEvent(&e)) {
        if(e.type == SDL_QUIT) end++; //quit code
        if(e.type == SDL_KEYDOWN) {
            switch (e.key.keysym.sym) {
                case SDLK_ESCAPE: end++; break;
                case SDLK_LEFT: curLocation--; break;
                case SDLK_RIGHT: curLocation++; break;
            }
        }
    }

    return 0;
}

这一个根本没有重复。

链接地址: http://www.djcxy.com/p/33859.html

上一篇: Key repeat delay in SDL

下一篇: Audio queue cannot record audio after playing a stream