2011-12-22 6 views
5

Ho appena eseguito l'utile tutorial per principianti allo http://www.riemers.net/eng/Tutorials/XNA/Csharp/series2d.php e sono ragionevolmente soddisfatto del risultato.Effetti sonori XNA che rallentano il sistema in modo massiccio

Tuttavia, ho notato che utilizzando 3 file .wav per gli effetti sonori, il gioco è rallentato in maniera massiccia, ho adattato questa porzione di codice:

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

che svolge il SoundEffect lancio quando il viene premuto il pulsante, poiché il metodo di aggiornamento verifica questo valore 60 volte al secondo ed è difficile premere il pulsante in modo rapido, quindi ora lo riproduce solo una volta.

Tuttavia, rallenta ancora il gioco in modo massivo, il che ovviamente non è l'ideale.

Ovviamente, non sto cercando di fare nulla con questo particolare gioco, ma mi piacerebbe sapere come risolvere questo problema per i progetti futuri e solo perché è un po 'irritante.

Acclamazioni Ryan

+1

Non so se questo risolverà il tuo problema, ma guardando quel codice, devi controllare se l'ultimo KeyboardState mostra quei pulsanti per essere attivo, o potresti implementare un ritardo tra quando potresti premere il pulsante. – annonymously

+0

Disattiva la ripetizione della chiave nel sistema e riprova. Se lo risolve, da qualche parte la tua app sta cercando di riprodurre il suono più spesso del previsto, anche se la senti solo una volta. – jefflunt

risposta

0

qui è il problema: dicono si esegue a 60 fps. se si tiene premuto il tasto per 1 secondo, l'effetto sonoro si attiverà 60 volte (si noti che si sta controllando .IsKeyDown, per controllare solo quando è necessario controllare se è stato premuto, non se è giù)

così si dispone di un paio di soluzioni:

1) si emettono solo sulla prima pressa

2) si va nel progetto XACT e limitare le istanze massime di spunto, o la categoria, a qualcosa ragionevole (3 è un buon numero, usando la sostituzione più vecchia)

mentre potresti essere tentato di fare # 1, la soluzione migliore è # 2, poiché ti introduce a come limitare correttamente le emissioni sonore a livello globale, inoltre ci sono un sacco di cose interessanti che puoi fare quando sai (variare l'altezza, scegliere a caso altri suoni, ecc.).

+0

Ecco un articolo che mostra esattamente come fare questo: http://xna-uk.net/blogs/offbyone/archive/2010/03/26/sound-in-xna-3-1-part-ii.aspx plus, contiene le spiegazioni delle altre caratteristiche di nifty xact che ho menzionato. – JasonS

+0

Personalmente, probabilmente farei entrambe le cose. Per la stessa importanza è imparare come intrappolare eventi specifici che si verificano in un gioco. Ma ottima risposta, +1 –