У меня непреднамеренная задержка в игре Mix_Chunk - PullRequest
3 голосов
/ 12 июня 2009

Итак, я пытаюсь изучить SDL и создаю маленькую игру. Когда пользователь нажимает пробел, он должен воспроизводить звук. Это работает, но для воспроизведения звука требуется около 0,5 секунды ... Как бы это исправить? Я проверил фактический файл, чтобы увидеть, была ли задержка только его частью, и это оказалось не так.

SDL с C ++ на 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;
    }
}

Если понадобится больше, дайте мне знать.

1 Ответ

5 голосов
/ 12 июня 2009

Обычно при проверке SDL проверяется наличие заголовков DirectX (очевидно)

Можете ли вы попытаться перекомпилировать с поддержкой DirectX?

Кроме того, какой объем буферизации вы применяете на стороне клиента? С этим может быть проблема.

РЕДАКТИРОВАТЬ - После комментариев ниже :

  1. Попробуйте увеличить размер вашего буфера.
  2. Что я имею в виду под перекомпиляцией с поддержкой DirectX, попробуйте включить заголовки из следующего источника, чтобы SDL пропустил их проверку. http://www.libsdl.org/extras/win32/common/directx-devel.tar.gz
...