Comunidad de diseño web y desarrollo en internet online

MovieClip no se puede acceder luego de gotoAndStop()

Citar            
MensajeEscrito el 12 Ago 2011 06:13 am
Hola. Estoy teniendo un problema que me tiene bastante tiempo tratando de solucionarlo y nada. Para simplificar el asunto, tengo en un frame un mc personaje. Al hacer click en un boton, hace un gotoAndStop a otro frame donde ese mc personaje ya no existe. Luego en este nuevo frame al presionar otro botón, hace un gotoAndStop al frame original que contenía al mc personaje. Por alguna razón que no puedo entender siempre que intento acceder al mc personaje luego de hacer esa secuencia de gotoAndStop, me lo muestra como null.

Incluso estoy manejando el evento RENDER haciendo un invalidate y todo para esperar a que carguen correctamente todos los mcs hijos, pero sigue siendo null. Lo más raro es que los otros mcs que tengo sí son accesibles. He puesto un timer de 3 segundos y luego de cumplido el tiempo intentar acceder al mc personaje, pero sigue siendo null. Y todos los accesos que hago solo botan null cuando voy al segundo frame y vuelvo al original. Cuando estoy por primera vez en el frame que contiene al mc personaje todo va bien. Incluso he puesto un enterFrame que me haga un trace infinito del mc personaje y por más que espero, nunca deja de ser null (cuando voy al frame original por segunda vez solamente).

Luego por seguir buscando dónde está el error. Puse código en el primer frame del mc personaje que me haga un simple trace. En la primera vez que entro, hace el trace pero de nuevo al ir al otro frame y volver al original ya no muestra nunca el trace y no importa con qué forma trate de acceder al objeto: this["personaje"], getChildByName, he intentado de todo... pero siempre me bota null !

Me parece demasiado extraño. En realidad hay más lógica por detrás. Es un proyecto de un juego más o menos grande y al ir de un frame a otro en realidad se hace un par de acciones más, pero he estado probando de todo para encontrar el error y no encuentro nada raro. De todas formas no descarto que haya algún problema en la lógica, pero considero que a estas alturas ya he probado de todo y no sé por dónde más buscar algún error. Alguien tiene alguna pista de qué podría estar pasando? :( Disculpen que no ponga el código, pero realmente es bastante y creo que no aportaría mucho en este caso, porque nadie se atrevería a leerlo completo. Solo espero alguna idea de alguna posibilidad para ver si alguna parte de mi código se relaciona y seguir buscando cómo reparar el error por ahí.

Por sprom

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Ago 2011 01:38 pm
La explicación anda por ahí y la puedes googlear, pero básicamente se ejecuta todo el código del fotograma antes de moverse al frame, por lo cual si en el fotograma 5 tienes un MC llamado personaje y haces esto

gotoAndStop(5);
personaje.play()

Da error porque ejecuta ambas cosas y DESPUÉS mueve al fotograma en cuestión

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 12 Ago 2011 07:11 pm
Solisarg, gracias por la respuesta, pero olvidé mencionar algo. Digamos que uso el frame 4 y 5. En el 4 está el mc personaje y en el 5 no está. En el código del frame 5 no hay ninguna referencia a personaje. Incluso luego de la llamada a gotoAndStop me he asegurado de que no haya ninguna otra línea de código, cosa que apenas llamo a gotoAndStop se ejecuta el código del frame destino (creo que funciona más o menos así). Lo extraño es que el código del frame 4 es el único que tiene la referencia a personaje y al entrar ahí por primera vez todo va normal. Pero luego de hacer la secuencia gotoAndStop del 4 al 5 y del 5 al 4, personaje aparece como null al ejecutar el mismo código del frame 4 que al comienzo iba bien.

Por sprom

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Ago 2011 07:19 pm
Eso si es raro, ¿el personaje está en la línea de tiempo principal o dentro de algún otro? ¿Lo haces invisible o algo as{i antes de salirte al fotograma 5?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 12 Ago 2011 07:51 pm
Sí está en la línea de tiempo principal y hasta donde recuerdo no lo hago invisible ni lo saco de escena, pero estoy revisando de nuevo el código a ver si encuentro algo. Lo que pasa es que hay muchas cosas que se ejecutan adicionalmente luego del gotoAndStop que me está costando encontrar el error. Pero acabo de descubrir que ocurre esto solo al ir de un frame mayor a uno menor. Lo que hice ahora fue intercambiar las posiciones del frame 4 con el 5 (según el ejemplo anterior). En el 5 estaría el mc personaje y en el 4 ya no está. La película comienza en el frame 5 y al hacer gotoAndStop(4) hay problemas también con un movie clip que no se puede acceder correctamente, pero ya no es el mc personaje.

Por sprom

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Ago 2011 08:55 pm
Bueno, probando encontré un método que al inhabilitarlo arregla el problema, pero claro, eso también inhabilita una parte de la funcionalidad del juego. Creo que ahora puedo explicar un poco más en detalle qué estoy haciendo. En el juego, yo manejo un personaje que se mueve en un mundo que da la impresión de tener profundidad. Entonces según la profundidad del personaje, cada que es necesario voy calculando una posición en la jerarquía de hijos del mc principal para que se vea delante o detrás de ciertos objetos. Hago un removeChild al personaje principal y al encontrar una posición donde colocarlo le hago un addChildAt. Al dejar de llamar a este método, se arregló el problema, pero ahora el personaje siempre aparece en la misma profundidad y aparece detrás de algunos objetos con respecto a los cuales debería estar por delante.

Quiero aclarar que el mc personaje que usé para explicar el problema en los post anteriores no es el personaje principal del que hablo aquí, ya que ese no tiene problemas al intentar usarlo. El problema es que los objetos del mundo en el juego son mcs puestos directamente en un frame en flash sin código y parece que al mover constantemente el mc del personaje principal entre ellos (en cuando a childIndex) algunos de ellos aparecen como null. En ningún momento hago removeChild a estos objetos del escenario, solo lo hago para el personaje principal, pero este no me da problemas. Creo que hay algo que no entiendo muy bien cuando se hace el paso de un frame a otro. Qué ocurre exactamente? Se borran todos los childs y luego se agregan los childs del nuevo frame? Podrían haber problemas al haber dejado en medio de dos childs del frame, un mc que nunca estuvo creado en el escenario gráfico sino que fue creado con código?

Por sprom

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Ago 2011 10:50 pm
Soy muuuuy vago leyendo y aprecio muuuuucho la síntesis. Inhabilitaste un método y funciono, postea el método

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.