Comunidad de diseño web y desarrollo en internet online

Desaparecen botones as3

Citar            
MensajeEscrito el 03 Sep 2010 12:46 pm
Hola a todos.

Estoy haciendo un juego en as3 en el que tengo varios frames.

Al acabar una partida, si voy al frame de HighScores, al volver al menú principal me desaparece el botón de ir a las instrucciones, y el de ir a los HighScores no funciona. Está y cambia de color "onRollOver", pero si clikas en él no ocurre nada.

A parte si le das a jugar da algún otro fallo, pero eso es harina de otro costal.

Se os ocurre por qué puede fallar el programa en las sucesivas partidas tras la primera, pero no en la primera? Lo de los botones me ha dejado sin palabras...

Por Cher0

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 03 Sep 2010 01:31 pm
En realidad es un error bastante común y tiene que ver con el cleanup y la encapsulación, un problema que va un poco de la mano. Es bastante común que haya juegos armados con código desparramado en la línea de tiempo y en alguna decena de clases. Cuando el juego termina, limpiar todos los recursos utilizados, reiniciar las variables, etc no es una tarea menor. Si la arquitectura del juego es adecuada no traerá problemas mayores, pero si no es una consecuencia directa de la desprolijidad en la estructura de programación.
Luego en cuanto a tu botón que desaparece, pues alguna cosa en tu código no lo reinicializó, por ejemplo el comando que lo hace invisible al empezar a jugar no lo devuelve a visible al reiniciar

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 03 Sep 2010 07:12 pm
Muchas gracias por responder. El caso es que lo has clavado: tengo el juego en 8 clases y una linea de tiempo con 5 frames. Sin embargo, ¿el paso entre frames no debería limpiar las variables? Es al volver al frame del menú cuando desaparecen, y en ningún momento escondo los botones. Directamente cambio al fotograma correspondiente.

En un frame tengo el peso del juego, y el resto son del tipo:

Código ActionScript :

boton_Volver.addEventListener(MouseEvent.CLICK, tomenu);

records.mostrarRecords();

stop();


etc. Es muy raro...

Por Cher0

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 03 Sep 2010 07:16 pm
No, AS3 fue diseñado para trabajar dentro de clases, y funciona bastante mal cuando lo tiras en línea de tiempo. Una vez declaradas, las variables "viven" en la línea de tiempo y no se reinician por solo pasar por un fotograma. Deberías pensar en la arquitectura de tu juego y agregar en cada clase (y al timline) un cleanup y un reset

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 03 Sep 2010 07:45 pm
Muchas gracias Jorge.

Quizá debería haber dicho que estoy trabajando con Flash CS3 y Flash Player 9.

Busco cleanup y reset en la ayuda y no aparece nada.

Por Cher0

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 03 Sep 2010 07:48 pm
No es algo que exista, sino algo que tienes que hacer tu, aquí un pequeño ejemplo:

Código ActionScript :

function reset(){
  botonInstrucciones._visible = true
  vidas = 3
  puntos = 0
  enemigos._visible = false
  nave._x = posx
  nave._y = posy
}


En esta función le he devuelto valores de inicio a distintas variables, he cambiado posiciones y visibilizado un botón. Así tu deberías escribir una función o método si es en una clase, que reinicie lo que necesites, por ejemplo la visibilidad del botón que mencionas

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 03 Sep 2010 07:55 pm
Ahhhhh ok ok. Muchas gracias! Voy a hacerlo y te cuento

Por Cher0

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 03 Sep 2010 08:16 pm
buufff... Ahora al añadir la sentencia "boton_Jugar.visible = true;"

Me salta el error de acceso a un objeto nulo.

TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.
at SpaceInvaders_fla::MainTimeline/SpaceInvaders_fla::frame1()

Por Cher0

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 03 Sep 2010 08:17 pm
Lo tienes que poner en el fotograma donde esté el botón.
Tip: si mezclas clases con código en timeline tendrás muuuuuchos de estos errores

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 03 Sep 2010 08:21 pm
Gracias Jorge. Está en el mismo fotograma.

Lo tendré en cuenta para futuros proyectos.

Por Cher0

18 de clabLevel



 

chrome

 

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