Comunidad de diseño web y desarrollo en internet online

Hacer variables que se reconozcan en todos los movies.

Citar            
MensajeEscrito el 22 Feb 2010 02:42 pm
Hola a todos, estoy algo confundido con un tema y es a la hora de declarar varaibles públicas. Creo que lo estoy entendiendo mal, pero ¿una variable que se declara en el "Document Class" como pública no deberia ser reconocida en todas las movies que se crean?, pero parece que sólo las reconoce la movie principal.

Quiero hacer una instancia de la clase SoundChannel que sea manipulable en todos los movies, asi tengo el movie con este document class.

Código ActionScript :

package 
{   
   
   import flash.net.URLRequest;
   import flash.media.Sound;
   import flash.media.SoundLoaderContext;
   import flash.media.SoundChannel;
   import flash.media.SoundMixer;
        import flash.display.*;
   import flash.events.*;

        public class Anuario_2010 extends MovieClip 
        {
                public var myMainChannel:SoundChannel = new SoundChannel();
      public var isPlaying:Boolean = true;
      
                public function Anuario_2010() 
      {
      }
      
   }
}


Luego en el primer frame del movie principal:

Código ActionScript :


control_general_mc.stop_music_btn.addEventListener(MouseEvent.CLICK, stopMusic);
function stopMusic(evt:MouseEvent):void
{
   if(isPlaying )
   {
   SoundMixer.stopAll(); 
   control_general_mc.equilizer_mc.gotoAndStop(1);
   isPlaying = false;
   
   var mySound:Sound = new Sound();
   var mySoundRequest:URLRequest = new URLRequest("sounds/coffeeshop.mp3");
   mySound.load(mySoundRequest);
   
   }
}

control_general_mc.play_music_btn.addEventListener(MouseEvent.CLICK, playMusic);
function playMusic(evt:MouseEvent):void
{
   
   if(!isPlaying)
   {
   myMainChannel = mySound.play(0, int.MAX_VALUE);
   control_general_mc.equilizer_mc.play();
   isPlaying = true;
   }
      
}

//Lista de links música

lista_links_mc.cl01_al01_btn.addEventListener(MouseEvent.CLICK, myMusic);

function myMusic(evt:MouseEvent) 
{
   SoundMixer.stopAll(); 
   var snd:Sound = new Sound();
        var req:URLRequest = new URLRequest("file_01.mp3");
         snd.load(req);
   myMainChannel = snd.play(0, int.MAX_VALUE);
   isPlaying = true;
   control_general_mc.equilizer_mc.play();
}


Todo funciona perfecto porqué el código está en el 1er frame del movie principal, pero si quiero referirme a estas variables: isPlaying, myMainChannel, desde adentro de una película con código, no las reconoce porqué no están declaradas ahí.

Mi pregunta es, ¿Cómo puedo hacer para que estas variables que se escriben en el "document class" se reconozca en TODO lugar?, por decirlo de alguna manera.

Gracias por cualquier ayuda en este tema.

Por djburner

19 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 Feb 2010 03:49 pm
Una variable pública es un miembro de una clase al que se puede acceder directamente a través de una instancia. En este caso la instancia de la clase es root (o level0), es decir intenta root.mivariable
Luego si vas a crear un document class, pon en la clase el código y no en la línea de tiempo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 22 Feb 2010 06:04 pm
Gracias por responder Solisager.

Dentro de un rato intento entender mejor tu consejo porqué aun estoy verde en muchos aspectos de AS3 y escribir el "Document Class" es uno de ellos, Por ahora solucioné el problema que tengo poniendo la siguiente linea de código en el movie clip que contiene los links de música, dado que SoundMixer.stopAll() cancela todos los sonidos (no importa que) no tengo problemas con cancelar todos las capas de música y crear una instancia de un nuevo canal. Solo tengo un problema a la hora de referir desde aqui una orden a otro movie clip (Control General) el cual contiene una animación.

Esto está escrito dentro del movie clip que contiene los links de música. Este movie está dentro del main principal bajo el nombre de lista_musica_mc.

Código ActionScript :


var mySecondChannel:SoundChannel = new SoundChannel();

//click_cl01_al01.addEvent..."click."..click_cl01_al01

function click_cl01_al01(evt:MouseEvent):void
{   
        //Musica
   
   SoundMixer.stopAll(); 
   var snd:Sound = new Sound();
        var req:URLRequest = new URLRequest("file_01.mp3");
        snd.load(req);
   mySecondChannel = snd.play(0, int.MAX_VALUE);
   //Esta es la linea que no puedo referir correctamente.
       //control_general_mc.equilizer_mc.play();
   
   
}



Como vez, no puedo andar a caminar la pelicula equilizer_mc que está dentro de "control_general_mc" que está en mi movie principal.

He intentado con:

root.control_general_mc.equilizar_mc.play();
parent.control_general_mc.equilizer_mc.play();

Pero fijo no me estoy refieriendo bien a el porqué no lo reconoce, entonces me gustaría saber ¿Cómo puedo referirme correctamente a esta película en particular?

Gracias por cualquier sugerencia o ayuda.

Por djburner

19 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 Feb 2010 06:06 pm
Te llamé de otra forma, es Solisarg.

Por djburner

19 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Feb 2010 12:54 am
Resolvi mi problema con otro aproximamiento pero talvez a algún usuario le pueda servir de alguna manera. Lo que hice fue que al botón que está dentro de la película que contiene los links de música le cree un "dispatchEvent" y después en la main timeline le agregué un addListener que incluyera en su función la orden de detener el equalizer.

//En el movie clip que tiene los links dentro de la función que tiene atado el MouseEvent.CLICK

dispatchEvent(new Event("soundPlaying", true));

//En el main Timeline

addEventListener("soundPlaying", equalizerHandler);
function equalizerHandler(e:Event):void
{
control_general_mc.equalizer_mc.play();
isPlaying = true;
}

Talvez no es lo mejor pero me funcionó y talvez le pueda funcionar a alguien más esta solución. Por ahora voy a seguir digiriendo el consejo de Solisarg para hacerlo como se debe.

Por djburner

19 de clabLevel



 

firefox

 

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