4

だから私はSDLを学び、小さなゲームを作ろうとしています。ユーザーがスペースバーを押すと、サウンドが再生されます。これは機能しますが、サウンドの再生に約 0.5 秒かかります... どうすれば修正できますか? 実際のファイルをチェックして、遅延がその一部であるかどうかを確認しましたが、そうではないことが判明しました。

Win Vista での C++ を使用した SDL。

関連するコードを次に示します。

...
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 に答える