4

所以我正在尝试学习 SDL 并创建一个小游戏。当用户按下空格键时,它应该会播放声音。这行得通,但播放声音大约需要 0.5 秒......我该如何解决这个问题?我检查了实际文件,看看延迟是否只是其中的一部分,结果并非如此。

SDL with c++ on win vista。

这是一些相关的代码:

...
Mix_OpenAudio( 22050, MIX_DEFAULT_FORMAT, 2, 4096 )
...

    main() 
    {

    ...

    Mix_PlayMusic( BG_Music, 0 );   //background music

        while( quit == false )
        {
            fps.start();
            fire.handleInput( event, ship.get_x_pos() );
    ...
    }

句柄输入函数:

void lasersC::handleInput( SDL_Event &event, int x )
{
    Uint8 *keystates = SDL_GetKeyState( NULL );

    if ( keystates[ SDLK_SPACE ] && delay == 0)
    {
        Mix_PlayChannel(-1, laser, 0);
        fired * F = new fired( NULL, S_HEIGHT - 50, x + 20 );

        F->shot  = lasers;
        F->y_pos = S_HEIGHT - 50;
        F->x_pos = x + 20;

        weps.push_back( F );
        delay = 10;
    }
}

如果需要更多,请告诉我。

4

1 回答 1

6

编译 SDL 时通常会检查 DirectX 标头(显然)

您可以尝试使用 DirectX 支持重新编译吗?

另外,您在客户端执行了多少缓冲?这可能是个问题。

编辑-在下面的评论之后

  1. 尝试增加缓冲区的大小。
  2. 我所说的使用 DirectX 支持重新编译的意思是,尝试包含来自以下源的标头,以便 SDL 跳过检查它们。 http://www.libsdl.org/extras/win32/common/directx-devel.tar.gz
于 2009-06-11T22:08:33.560 回答