Comunidad de diseño web y desarrollo en internet online

Error completamente inexplicable ¿bug de flash?

Citar            
MensajeEscrito el 13 Ago 2006 11:54 pm
hola, estoy trabajando en flash 8 y tengo un problema que no puedo entender, el tema es muy simple, con solo 2 lineas ya me da el error. lo que sucede lo demuestro en este pequeño programa que se puede hacer en un minuto:

-Pongo un clip de pelicula en la biblioteca con el nombre "clip" y lo exporto para action script.
-voy al primer frame de la pelicula y pongo el siguiente codigo;

Código :

attachMovie("clip", myclip, getNextHighestDepth());
removeMovieClip(myclip);

Bien, si todo esto funciona, este pequeño programa tendria que hacer lo siguiente: NADA, ya que primero le doy la orden de agregar el clip "clip" bajo el nombre "myclip" e inmediatamente lo elimino con removeMovieClip.

Hasta aca todo funciona perfecto, el problema viene cuando a este mini-programa intento agregarle un componente de flash (si, un componente, cualquiera, ya sea un scrollbar o un combobox o lo que sea), al agregar el dichoso componente, el comando removeMovieClip deja de funcionar como por arte de magia. Esto puede comprobarse facilmente ya que el clip que agregamos se agrega correctamente pero nunca se remueve.

Bueno, este es mi problema, y al ser algo tan simple todo me lleva a pensar que no es un error mio, pero si alguien ve cual puede ser el problema le agradeceria infinitamente que me ayude.

Un dato mas: para que el problema aparezca el componente no tiene que estar necesariamente en escena, basta con que este en la biblioteca para que ya no funcione removeMovieClip.

Por periclez

13 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 14 Ago 2006 02:47 am
Hola Periclez,
Reproducí y tu error y me pasó lo mismo, lo que hice para solucionarlo es cambiar el nombre del movieclip en la libreria:

Código :

attachMovie("clipper", myclip, getNextHighestDepth());
removeMovieClip(myclip);


Como veras en vez de llamarlo "clip" lo llamé (arbitrariamente) "clipper", lo que debe estar pasando es que algunos de los elementos de la libreria que tienen los componentes debe llamarse "clip" y al instanciarlos se hace lio.

Me pasaba algo similar cuando ejecutaba el attachMovie dos veces y me creaba dos movies con el mismo nombre de instancia... simplemente ignoraba el primer movie creado hasta que eliminaba el segundo con el mismo nombre.

Por mutante_mc

15 de clabLevel



Genero:Masculino  

Buenos Aires, Argentina

firefox
Citar            
MensajeEscrito el 14 Ago 2006 03:08 am
yo tambien pense que podia ser un problema con los nombres de los elementos y las instancias, pero el problema sigue al cambiar "clip" por cualquier otro nombre, de hecho el codigo que pasaste tampoco me funciona.
ya no se que pensar sobre esto, no tiene logica en absoluto :shock:

Por periclez

13 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 14 Ago 2006 03:41 am

Código :

attachMovie("clip", "myclip", getNextHighestDepth());
removeMovieClip(myclip);


Comillas.

:)

Por J

148 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 Ago 2006 03:49 am
SOLUCIONADO:
ya encontre la respuesta, el problema es el comando "getNextHighestDepth()", este coloca al nuevo objeto en la profundidad mas alta cuyo numero es 1048575. Pero al agregar un componente, este numero se reserva para el mismo y envia el objeto que esta ahi a una posicion mas alta= 1048576, que esta fuera de rango. Por eso al intentar remover el clip que se encuentra en esa posicion, nos resulta imposible.

al final todo tenia una explicacion logica :cool:

ahora la solucion:
es usar una nueva clase de flash que es DepthManager, y para este caso simplemente hay que mover el clip de la profundidad en que se encuentra a otra que este dentro del rango, esto se puede hacer facilmente cambiando "getNextHighestDeep()" por "0" y agregando una linea despues de hacer el attach, quedaria asi:

Código :

attachMovie("clipper", myclip, 0);
myclip.setDepthTo(DepthManager.kTop);
removeMovieClip(myclip);

ya esta! ahora se pueden agregar componentes y removeMovieClip funciona bien!!! :)

Por periclez

13 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 14 Ago 2006 04:01 am
bueno, la curiosidad me mato y lo probe

Código :

attachMovie("mc", mc2, 0);
removeMovieClip(mc2);


aqui tambien funciona correctamente :D sin usar setDepthTo

ahora q dice la ayuda de flash :roll:


movieClipInstance.setDepthTo(depthFlag)

Descripción
Método; establece la profundidad de movieClipInstance en el valor que especifica depthFlag. Este método desplaza una instancia a otra profundidad para dar cabida a otro objeto. DepthManager utiliza un algoritmo de ordenación aleatoria para establecer las profundidades en incrementos de 20. El algoritmo incrementa las profundidades en caso de que Flash necesite



saludos

Por eldervaz

BOFH

10964 de clabLevel

39 tutoriales
56 articulos

Genero:Masculino  

en algún lugar del mundo

msie
Citar            
MensajeEscrito el 14 Ago 2006 04:08 am
A mi tambien me funciona usando "attachMovie("mc", mc2, 0);" , pero en mi programa esta sentencia estaba dentro de un FOR, por lo tanto no podia colocar todas las instancias en 0, porque al llamar 2 instancias en la misma profundidad, la primera desaparece, por eso si era necesario usar setDepthTo despues de hacer el attach.
De todas maneras el problema se origina al utilizar "getNextHighestDeep();", ya que esta sentencia NO es compatible con la segunda version de los componentes de flash y por lo tanto no hay que usarla.
para mas informacion leer:
Livedocs removeMovieClip

Por periclez

13 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 14 Ago 2006 05:32 am
si vas a usar un for, puedes usarlo cambiando profundidad y nombres, y tambien funciona.

Código :

for(var i:Number=1;i<11;i++){
    attachMovie("clip", "myclip"+i, i);
    removeMovieClip(this["myclip"+i]);
}


pero muchas gracias por la info de la clase DepthManager.

Por J

148 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 Oct 2008 06:13 pm
Graciassss flaco hace 2 días q estoy tratando de solucionar esto y no entendía porq joraca pasaba... un detalle, solo cuando al componente le pones Exportar en fotograma 1, deja de andar el remove.

Sos un groso, sabelo

Por JuMp!nG

4 de clabLevel



 

firefox

 

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