Comunidad de diseño web y desarrollo en internet online

Asignar eventos a movies externos cargados

Citar            
MensajeEscrito el 03 Jun 2005 03:57 pm
Hola a todos:

Necesito cargar movies en un archivo principal para lo que uso el código:

peli.createEmptyMovieClip("P" + IdElemento , ContadorCapas);
peli["P" + IdElemento].loadMovie(ArchivoIcono);

peli["P" + IdElemento].onRelease = function() {
trace("Test");
}

//también he probado
peli["P" + IdElemento].onMouseDown = function() {
trace("Test");
}

todo funciona, pero los nuevos movies cargados no responen al evento clic del ratón. ¿Alguien me puede ayudar?

Un dato más: todo el código ha de estar en la película principal no puedo poner código en las películas a cargar.

Gracias.

Por pnoguera

23 de clabLevel



 

msie
Citar            
MensajeEscrito el 03 Jun 2005 04:07 pm

Por Altrix

156 de clabLevel



 

Cuba, Ciudad de la Habana

msie
Citar            
MensajeEscrito el 03 Jun 2005 05:18 pm
hmm checa el numero 4 de mi firma en donde sale el for o bueno checa todo
veamos debe funcionar

Código :

_root.peli["P" + IdElemento].onRelease = function() {
       trace("Test");
} 

trace(_root.peli["P" + IdElemento]);


ponle el trace para depurar y ver si existe e boton dinos que es lo da como resultado


ahh archivoicono :?que tipo es swf image creo que debes colocarle .swf o .jpg ademas si es swf es un boton <-- o un clip de pelicula

Saludos :D

Por flasher

Invitado



 

firefox
Citar            
MensajeEscrito el 03 Jun 2005 05:36 pm
No me funciona.

En realidad todo se ejecuta n veces en un blucle.

El archivoicono es un swf que contiene un botón. Con la carga de los archivos no tengo problemas (se visualizan bien y en su sitio), sí con la asignación dinámica de onMouseDown. He probado de ponerlo en el onEnterFrame de la película donde se alojan y parece que va mejor, pero no del todo bien.

Por pnoguera

23 de clabLevel



 

msie
Citar            
MensajeEscrito el 03 Jun 2005 08:05 pm
leiste el post??????

ahi fael, explica el pq no te pincha lo que quieres hacer, y es pq tienes que asignar los eventos cuando se cargue completamente...

Por Altrix

156 de clabLevel



 

Cuba, Ciudad de la Habana

msie
Citar            
MensajeEscrito el 03 Jun 2005 08:12 pm
en este caso el archvio icono mejor deberia estar en la libreria y no realizado un loadMovie

en el otro caso tu le quieres dar el evento al boton y no al movie creado!!

Código :

peli["P" + IdElemento].nombredelboton.onMouseDown = function() {
trace("Test");
}


Saludos :D

Por flasher

Invitado



 

firefox
Citar            
MensajeEscrito el 04 Jun 2005 05:24 am
No hay manera Altrix, creo que el origen de mi problema está primero en mi ignorancia y segundo en que todo lo tengo dentro de un bucle así que ahí va el código completo:

Código :

on(Press){
   var CategoriasSeleccion = "";
   for(var i = 0; i < lstCategorias.length; i++){
      if(lstCategorias.getItemAt(i).checked == true){
         CategoriasSeleccion = CategoriasSeleccion + lstCategorias.getItemAt(i).data + ":";
      }
   }

   var xmlElementos:XML = new XML();

   xmlElementos.ignoreWhite = true;

   xmlElementos.onLoad = function(exito) {
      if (exito) {

         var ArchivoIcono;
         var ContadorCapas = 2;
         var IdElemento;
         var nombreElemento;
         
         for ( var i = 0; i < xmlElementos.firstChild.childNodes[0].childNodes.length; i++ ){
            ArchivoIcono = xmlElementos.firstChild.childNodes[0].childNodes[i].childNodes[2].childNodes[0].nodeValue;
            trace("Icono categorias: " + ArchivoIcono);
            for ( var j = 0; j < xmlElementos.firstChild.childNodes[0].childNodes[i].childNodes[3].childNodes.length; j++ ){
               trace("Id elemento: " + xmlElementos.firstChild.childNodes[0].childNodes[i].childNodes[3].childNodes[j].childNodes[0].childNodes[0].nodeValue);
               trace("Id elemento: " + xmlElementos.firstChild.childNodes[0].childNodes[i].childNodes[3].childNodes[j].childNodes[1].childNodes[0].nodeValue);
               trace("Id elemento: " + xmlElementos.firstChild.childNodes[0].childNodes[i].childNodes[3].childNodes[j].childNodes[2].childNodes[0].nodeValue);
               trace("Id elemento: " + xmlElementos.firstChild.childNodes[0].childNodes[i].childNodes[3].childNodes[j].childNodes[3].childNodes[0].nodeValue);
               
               IdElemento = xmlElementos.firstChild.childNodes[0].childNodes[i].childNodes[3].childNodes[j].childNodes[0].childNodes[0].nodeValue;
               map.Mapa.createEmptyMovieClip("P" + IdElemento , ContadorCapas);
               map.Mapa["P" + IdElemento].loadMovie(ArchivoIcono);//, "GET");
               map.Mapa["P" + IdElemento]._x = xmlElementos.firstChild.childNodes[0].childNodes[i].childNodes[3].childNodes[j].childNodes[2].childNodes[0].nodeValue; 
               map.Mapa["P" + IdElemento]._y = xmlElementos.firstChild.childNodes[0].childNodes[i].childNodes[3].childNodes[j].childNodes[3].childNodes[0].nodeValue;      
               map.Mapa["P" + IdElemento]._alpha = 75;
                  
               ContadorCapas++
               
               nombreElemento = "P" + IdElemento;

               nombreElemento = setInterval(asignarALoad, 1, map.Mapa["P" + IdElemento] ) 
               function asignarALoad(MC:MovieClip){ 
                  if (MC.getBytesLoaded() == MC.getBytesTotal()) { 
                     trace(IdElemento);
                     MC.onMouseDown = function() {
                        URL = this;
                        if(ModoCursor == "Seleccionar"){
                           MostrarFicha();
                           AmpliarInformacion();
                        }
                     }
                     clearInterval(nombreElemento)
                  }
               }
            }            
         }
      }
   }

   xmlElementos.load("exemple2.xml");

}


Por cierto flasher, no puedo tener los iconos en la libreria del movie principal y lo de poner el nombre del boton tampoco funciona.

Además los iconos sí me los carga pero su comportamiento no.

Otra pista: si pongo el onMouseDown dentro de un map.Mapa.onEnterFrame va, pero todos los iconos tienen el mismo onMouseDown que es el del último cargado.

Una vez más gracias por vuestro tiempo.

Por pnoguera

23 de clabLevel



 

msie
Citar            
MensajeEscrito el 04 Jun 2005 02:00 pm
Ya me ha pasado esto mismo. Lo solucione asi:
1. Cree el clip.
2. Adentro genere otro clip y alli adentro una superficie de igual tamaño que el boton que está en el swf qu levanto, lo hice con el metodo lineStyle de los clips. Este clip de adentro lo hice invisible.
3. luego cargue el swf en un nivel diferente.

Y asi me quedó una superficie sobre la cual aplicar un método.

Espero te sirva.

Por La_Gata

123 de clabLevel



 

msie
Citar            
MensajeEscrito el 04 Jun 2005 02:54 pm
hmmm veamos F1 en flash tipeo onMouseDown y sale

someListener.onMouseDown

Descripción
Detector; recibe notificación cuando se presiona el ratón. Para utilizar el detector onMouseDown, debe crear un objeto detector. A continuación, puede definir una función para onMouseDown y utilizar el método addListener() para registrar el detector en el objeto Mouse.

entonces o tienes que unas onPress o onRelease

y para probar

Código :

function asignarALoad(MC:MovieClip){
                  if (MC.getBytesLoaded() == MC.getBytesTotal()) {
                     trace(MC);//<----- dinos que da aqui como resultado
                     clearInterval(nombreElemento)
                  }
}


y en los botones que salga

Código :

on(press){
      trace(this);
}

y dinos cuando le haces clic uqe te da como resultado

saludos :D

Por flasher

Invitado



 

firefox
Citar            
MensajeEscrito el 04 Jun 2005 03:34 pm
Flasher,

Pues no hay manera, me carga bien los swf, pero ni me hace el trace(MC) ni me asigna el onPress a los swf cargados... snif.

Estoy un poco desesperado por que el onPress en cada swf a cargar funciona bien, pero si un dia tengo que hacer retoques necesitaré revisar muchos archivos y no me parece la solución más adecuada (ya no digo elegante...).

Gracias por todo.

Por pnoguera

23 de clabLevel



 

msie
Citar            
MensajeEscrito el 04 Jun 2005 05:06 pm
Ya lo tengo a punto, he sacado la función fuera del bucle y casi funciona sólo me queda por resolver como se crean nombres de variables en tiempo de ejecución. Estas variables las asignaré a lo correspondientes setInterval de cada iteación del bucle.

Si sabéis como hacerlo...

Muchísimas gracias.

Por pnoguera

23 de clabLevel



 

msie
Citar            
MensajeEscrito el 04 Jun 2005 05:07 pm
hmm bueno se hizo lo que se pudo... si no te muestra el MC significa que no entra al if checalo desde ahi talvez si le pones >=, pero ahi esta el problema

saludos y suerte :D

Por flasher

Invitado



 

firefox
Citar            
MensajeEscrito el 04 Jun 2005 05:36 pm
Ya está solucionado flasher: he sacado la funcion fuera del bucle, he creado variables dinámicamente (con set()) para difinir los intervalos (setInterval) que van llamando a la función.

Buf, este parto me ha dejado exhausto (9 horas demasiadas para un primerizo)...

Si no llega a ser por vosotros y la inestimable Presencia de María que siempre está en Zorder = 0 en mi monitor no hubiera podido ser.

GRACIAS.

Por pnoguera

23 de clabLevel



 

msie

 

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