2009-06-11 5 views
3

Also versuche ich SDL zu lernen und ein kleines Spiel zu erstellen. Wenn der Benutzer die Leertaste drückt, sollte ein Ton abgespielt werden. Das funktioniert, aber der Sound dauert etwa 0,5 Sekunden. Wie würde ich das beheben? Ich habe die tatsächliche Datei überprüft, um zu sehen, ob die Verzögerung nur ein Teil davon war, und das stellte sich als nicht zutreffend heraus.Ich habe eine unbeabsichtigte Verzögerung beim Abspielen eines Mix_Chunk

SDL mit C++ auf Win Vista.

Hier einige relevante Code:

... 
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()); 
    ... 
    } 

der Griff Eingabefunktion:

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; 
    } 
} 

Wenn mehr benötigt wird, lassen Sie es mich wissen.

+0

Vielen Dank! Das hat mich verrückt gemacht. – Malabarba

Antwort

5

Es ist in der Regel eine Prüfung für Header DirectX, wenn SDL Kompilieren (scheinbar)

können Sie versuchen, mit DirectX-Unterstützung neu zu kompilieren?

Wie viel Pufferung erzwingen Sie auch auf der Client-Seite? Es könnte ein Problem damit sein.

EDIT-Nach den Kommentaren unten:

  1. Versuchen Sie die Größe Ihrer Puffer zu erhöhen.
  2. Was ich meine, durch Neukompilieren mit DirectX-Unterstützung ist, versuchen Sie, Header aus der folgenden Quelle aufzunehmen, so dass SDL überspringt, nach ihnen zu suchen. http://www.libsdl.org/extras/win32/common/directx-devel.tar.gz
+0

Ich bin nicht wirklich sicher, was das bedeutet. – Justen

+0

@ die Pufferung, Mix_OpenAudio (22050, MIX_DEFAULT_FORMAT, 2, 4096) – Justen

+0

Überprüfen Sie meine Bearbeitung oben. –