Comunidad de diseño web y desarrollo en internet online

Problemas con attachSound

Citar            
MensajeEscrito el 15 Mar 2011 04:04 am
Hola gente, los molesto de nuevo en esta oportunidad con la idea de darle fin a un problema que tengo hace rato, y no encuentro un buen tutorial para solucionarlo.
Tengo varios sonidos reproduciendose al mismo tiempo mediante la función attachSound, algunos de ellos reproduciendose constantemente en loop y otros son "llamados" cuando se los necesita. Hasta ahi todo ok, pero cuando uno de los sonidos cambia de volumen, el resto "lo acompaña", es decir, no consigo independizar los distintos volúmenes. Lei por ahi que es porque debo "asignar" los distintos sonidos a distintos movieclip, pero no consigo hacerlo ya que en ningun lado encontré una explicación detallada, no se si crear los movieclips a mano, mediante codigo, si es lo mismo, donde colocar los sonidos dentro de los mcs... Probé varias cosas pero nada funciona...

¿Alquien me puede explicar lo más claramente posible como hacer?

PD: En estos momentos tengo todo funcionando ok con loadSound, obviamente no tengo el mismo problema y cada volumen de cada sonido es indepentiente, pero preferiría usar attachSound porque no quiero andar con mp3 externos y además, prefiero los wavs que no dejan ese molesto silencio caracteristicos de los mp3s en flash...

En fin, gracias! :D

Por alexisevega

20 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 15 Mar 2011 02:40 pm
Puedes crearlo a mano o por código. Lo mas simple es que crees tantos MCs como sonidos necesites cambiarle el volúmen, luego entras en el timeline de cada MC y allí creas el sonido. Basicamente todos los sonidos creados en un mismo timeline comparten el mismo volúmen

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 15 Mar 2011 03:55 pm
Para no duplicar codigo, crea una funcion que te regrese el sonido ya asignado a un movieclip

Código ActionScript :

function crearSonido(clip, profundidad, volumen, nombre) : Sound
{
    var mcContenendor : MovieClip = this.createEmptyMovieClip(clip, profundidad);
    var miSonido : Sound = new Sound(mcContenendor);
    miSonido.setVolume(volumen);
    miSonido.attachSound(nombre);
    return miSonido;
};


Utiliza variables para declarar tus sonidos:

Código ActionScript :

var xSonido : Sound = crearSonido('xSonido', 200, 30, 'xSonidoMP3');
var ySonido : Sound = crearSonido('ySonido', 201, 100, 'ySonidoMP3');


Una vez declarados, puedes accederlos cuando quieras:

Código ActionScript :

xSonido.start(0, 1);

Por Acreonte

Claber

1543 de clabLevel

5 tutoriales
6 articulos

Genero:Masculino  

Digital Scientist

firefox
Citar            
MensajeEscrito el 15 Mar 2011 06:17 pm
El problema continúa. Lo que hice fue crear 3 mcs "a mano", en el primer frame de cada uno creo los sonidos. Acá van los códigos:

En "musicafondo_mc":

Código ActionScript :

var musica:Sound = new Sound(); 
musica.attachSound("musica")
musica.onSoundComplete = function(){
this.start();
}
musica.start();


En "sonidogolpe_mc" (un sonido que se reproduce cuando se produce un hitTest):

Código ActionScript :

var golpe_sound:Sound = new Sound();
golpe_sound.attachSound("golpe")


En "sonidocarrito_mc":

Código ActionScript :

var carrito:Sound = new Sound(); 
carrito.attachSound("carrito")
carrito.onSoundComplete = function(){
this.start();
}
carrito.start();


Éste último es el sonido que me complica la vida, porque es un loop que SOLO SE ESCUCHA CUANDO CIERTO MOVIECLIP SE MUEVE, para ser mas específico, en el juego hay un carrito que se mueve con las las teclas izquierda y derecha del teclado, y al hacerlo se escucha el sonido, cuando se dejan de apretar las teclas el volumen vuelve a 0 y el sonido "se detiene"...

En "cont_mc" (éste mc es el famoso carrito, no pongo el código entero porque funciona todo ok excepto lo de los sonidos, simplemente les aclaro que la variable "velocidad" es la que uso para mover el movieclip)

Código ActionScript :

if(this.velocidad!=0){
      _root.sonidocarrito_mc.carrito.setVolume(70)
      }
      else{
         _root.sonidocarrito_mc.carrito.setVolume(0)
      }


Bueno, al compilar el juego, no se escucha ningún sonido, cuando apreto izquierda o derecha, se escuchan todos... Es decir, siguen compartiendo los volumenes pese a que cada sonido está declarado en un mc distinto :(

¿Qué estoy haciendo mal?

Por alexisevega

20 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 15 Mar 2011 09:26 pm
Segun lo cuentas deberia funcionar ... igual no hace falta la ruta completa al clip, si el sonido esta declarado en donde tienes el codigo, carrito.setVolume es suficiente.
Luego tener los sonidos andando todo el tiempo y jugar con los volumenes quizás no sea lo mas adecuado (consumes memoria innecesariamente) Porque no e das el start cuando se mueve y el stop cuando termina? Como segundo parametro del start le puedes pasar 999 repeticiones, suficiente como para que siga sonando hasta que sueltes la tecla

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

safari
Citar            
MensajeEscrito el 16 Mar 2011 12:13 am
Solisarg:

Obviamente lo primero que intenté hacer es eso. Esta es parte del código que uso en el movieclip que se tiene que mover:

Código ActionScript :

onClipEvent(enterFrame){
       if(Key.isDown(Key.LEFT) or Key.isDown(Key.RIGHT)){
      this.minero_mc.gotoAndStop(2)
      this.pies_mc.gotoAndStop(2);
      if(this.velocidad!=0){
      _root.sonidocarrito_mc.carrito.start(0,999)
      }
      else{
         carrito.stop()
      }
      }


Se presenta el problema de que al estar el "_root.sonidocarrito_mc.carrito.start(0,999)" dentro del "enterFrame", al apretar derecha o izquierda, el sonido se inicia continuamente (digamos suena como un CD rayado), es decir no se reproduce continuamente. No se que solución hay para eso...
Igualmente, cuando arranqué con esto de los volumenes fue una medida desesperada, se perfectamente que hacer esto no es ni cerca lo ideal pero bueno, todo lo demás me falló. Y ahora también quiero solucionar lo de los volumenes porque si bien a lo mejor se pueda hacer como vos decis, el dia de mañana puedo necesitar tener en claro lo de los volumenes independientes :wink:

Por alexisevega

20 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 16 Mar 2011 01:57 am
¿Un onEnterFrame para chequear el KeyDown ...? Mejor agrega un listener al objeto Key (creo que la ayuda trae un ejemplo) y te evitas perder recursos de esa manera

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 16 Mar 2011 02:51 am
Porque necesito que el Mc se mueva con continuidad, usando otros sistemas que no son el enterFrame, el moviemiento es entrecortado. En realidad tampoco domino demasiado el lenguaje, a lo mejor se puede hacer que funcione bien como vos decis, pero de todas formas es un juego muy sencillo el que estoy haciendo y ahorrar recursos por ahora no es mi prioridad, sino hacer que ande lo más básico. Después me ocuparé de los detalles ;)
Lo que realmente me molesta ahora es el tema del sonido... Si tenes alguna idea de como solucionarlo, avisa por favor :)

Por alexisevega

20 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 16 Mar 2011 03:28 am
En realidad el problema no es de rendimiento, es de diseño, generalmente un mal diseño multiplica los problemas. Los controles de Key se hacen con un Key.addListener, los movimientos con Tween, etc ... pero bueno ...
Los sonidos se aislan en un MC y se controlan uno a uno, lo que has hecho debería funcionar, lo que suenen todos juntos no tiene mucho sentido

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 16 Mar 2011 02:59 pm
Jorge, ya lo pude arreglar, el tema estaba en la declaracion de sonido. Por ejemplo:

Código ActionScript :

var golpe_sound:Sound = new Sound(); 
golpe_sound.attachSound("golpe") 


A ese código, que está dentro de un mc, hay que agregarle un this dentro de los parámetros del new Sound, quedando así:

Código ActionScript :

var golpe_sound:Sound = new Sound(this); 
golpe_sound.attachSound("golpe") 


De esa manera se le asigna la linea de tiempo de ESE MC.

Bueno, soy feliz :D

Por otro lado, voy a ver como hago para optimizar un poco el resto del juego, aunque la verdad es que soy nuevo en esto de la programación y no estoy enterado de como hacer las cosas que me estas recomendando.

En fin, saludos, gracias por todo!

Por alexisevega

20 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 16 Mar 2011 03:04 pm
Pensé que lo asumía por defecto .... vaya, hace ya mucho que no trabajo con AS2 :)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.