2011-12-22 15 views
5

Acabo de ejecutar el tutorial de principiantes muy útil en http://www.riemers.net/eng/Tutorials/XNA/Csharp/series2d.php y estoy razonablemente contento con el resultado.XNA Efectos de sonido ralentizar el sistema de forma masiva

Sin embargo, me he dado cuenta de que mediante el uso de 3 archivos .wav para los efectos de sonido, el juego se ralentiza enormemente abajo, me he adaptado este trozo de código:

if (keybState.IsKeyDown(Keys.Enter) || keybState.IsKeyDown(Keys.Space)) 
     { 
      if (!rocketFlying) launch.Play(); 
      rocketFlying = true;  
      ... 
     } 

que desempeña el lanzamiento cuando el SoundEffect se presiona el botón, ya que el método de actualización lo comprueba 60 veces por segundo, y es difícil presionar el botón tan rápido, por lo que ahora solo se reproduce una vez.

Sin embargo, todavía ralentiza el juego masivamente, lo que obviamente no es ideal.

Obviamente, no estoy tratando de hacer nada con este juego en particular, pero me gustaría saber cómo resolver este problema para proyectos futuros y simplemente porque es un poco irritante.

Saludos Ryan

+1

No sé si esto solucionará su problema, pero al mirar ese código, debe verificar si el último KeyboardState muestra que esos botones están activos, o podría implementar un retraso entre el momento en que podría presionar el botón. – annonymously

+0

Apague la tecla repitiendo en su sistema y vuelva a intentarlo. Si eso lo soluciona, entonces, en algún lugar, la aplicación intenta reproducir el sonido con más frecuencia de la prevista, incluso si solo lo escuchas una vez. – jefflunt

Respuesta

0

aquí es el problema: que usted está ejecutando a 60 fps. si mantiene presionada la tecla durante 1 segundo, su efecto de sonido se disparará 60 veces (observe que solo está revisando .IsKeyDown, para verificar solo una vez que necesita comprobar si solo se presionó, no si está abajo)

tan usted tiene un par de soluciones:

1) solo emites en la primera prensa

2) de entrar en su proyecto xact y limitar el número máximo de instancias de su señal, o la categoría, a algo razonable (3 es un buen número, utilizando reemplazar el más antiguo)

mientras que usted puede estar tentado de hacer # 1, , la mejor solución es # 2, ya que le presenta cómo limitar apropiadamente las emisiones de sonido a nivel mundial, además hay una gran cantidad de cosas relacionadas que puede hacer cuando sabe (varía el tono, elige otros sonidos aleatoriamente, etc.).

+0

Aquí hay un artículo que muestra exactamente cómo hacer esto: http://xna-uk.net/blogs/offbyone/archive/2010/03/26/sound-in-xna-3-1-part-ii.aspx plus, contiene explicaciones de las otras funciones ingeniosas xact que he mencionado. – JasonS

+0

Solo personalmente, probablemente haría ambas cosas. Por igual importancia es aprender cómo atrapar eventos específicos que suceden en un juego. Pero gran respuesta, +1 –

Cuestiones relacionadas