Curso - Programación de un Space Invaders en Java

  Página Anterior - Sonido sencillo Página Actual - 28 - Corrigiendo los fallos de sonido   Página Siguiente - Pequeñas optimizaciones
  Índice del curso  

Corrigiendo los fallos de sonido

(c) Alexander Hristov

Si hemos probado nuestro el programa anterior, nos habremos dado cuenta de dos cosas : en primer lugar el fps ha bajado considerablemente y - lo que es mas grave - el juego ha comenzado a funcionar "a trompicones". El problema es que Java necesita preparar un sonido para su reproducción y este proceso lleva tiempo. Cada vez que solicitamos que se toque algo, como lo estamos haciendo desde nuestro bucle principal, el programa se detiene mientras Java perpara el sonido. Un planteamiento mejor - que además arregla el problema de los trompicones - es crear un nuevo hilo temporal que y desde este nuevo hilo solicitar la ejecución de un sonido. De esta forma el programa principal puede continuar sin que tengamos que esperar. Afortunadamente, tenemos todas las peticiones de reproducción de sonidos centralizadas en la clase SoundCache de forma que será fácil añadir el cambio sin afectar al resto del programa:


1     /**
2      * Curso Básico de desarrollo de Juegos en Java - Invaders
3      * 
4      * (c) 2004 Planetalia S.L. - Todos los derechos reservados. Prohibida su reproducción
5      * 
6      * http://www.planetalia.com
7      * 
8      */
9     package version28;
10    
11    import java.applet.Applet;
12    import java.applet.AudioClip;
13    import java.net.URL;
14    
15    public class SoundCache extends ResourceCache{
16      protected Object loadResource(URL url) {
17        return Applet.newAudioClip(url);
18        
19      }
20      public AudioClip getAudioClip(String name) {
21        return (AudioClip)getResource(name);  
22      }
23      
24 public void playSound(final String name) { 25 new Thread( 26 new Runnable() { 27 public void run() { 28 getAudioClip(name).play(); 29 } 30 } 31 ).start(); 32 } 33 34 public void loopSound(final String name) { 35 new Thread( 36 new Runnable() { 37 public void run() { 38 getAudioClip(name).loop(); 39 } 40 } 41 ).start(); } 42
43 } 44


Lista de archivos Java del programa en este paso

Actor.java Bomb.java Bullet.java Invaders.java
Laser.java Monster.java Player.java ResourceCache.java
SoundCache.java SpriteCache.java Stage.java  

Lista de recursos

bicho.gif bicho0.gif bicho1.gif bicho2.gif
bombD.gif bombDL.gif bombDR.gif bombL.gif
bombR.gif bombU.gif bombUL.gif bombUR.gif
disparo.gif disparo0.gif disparo1.gif disparo2.gif
explosion.wav misil.gif missile.wav musica.wav
nave.gif oceano.gif photon.wav Thumbs.db

  Página Anterior - Sonido sencillo Página Actual - 28 - Corrigiendo los fallos de sonido   Página Siguiente - Pequeñas optimizaciones
  Índice del curso  

(c) 2004 Planetalia S.L. Todos los derechos reservados. Prohibida su reproducción