Comunidad de diseño web y desarrollo en internet online

Duda Marcadores Juegos Flash

Citar            
MensajeEscrito el 03 Dic 2008 02:39 pm
Paso a explicaros un problemilla que me trae de cabeza desde hace unos días.

Estoy haciendo el típico juego de disparar con el ratón a clips de película. He añadido un marcador para los aciertos y otro para las vidas. Si se pulsa en lo alto de un clip de manera correcta, el marcador de acierto aumenta la cantidad progresivamente +1. En cambio, si se pulsa fuera del clip, el marcador de vida disminuye una cifra por cada clip mal dado -1.

Los marcadores los hice creando un campo de texto dinámico, le añadí la variable "strikes" y "vida" para cada uno. En el primer fotograma del root puse:

Código :

strikes = 0;
vida =1


Los clips de película, al pulsarlos realizan una animación, la cual en un fotograma determinado tiene el siguiente código:

Código :

_root.strikes = _root.strikes + 1


Y en el fondo he creado un clip que simula cuando se dispara fuera del objetivo, es decir, pierdes una vida cada vez que por error pulsas el fondo en vez del clip a disparar. Este fondo tiene el código:

Código :

_root.vida = _root.vida - 1


Todos los clips pulsables por el ratón que aumentan el valor "strikes" son el mismo. Arrastré el original desde la biblioteca hasta el área de trabajo y realicé un copia y pega de éste.

Como veis es bien sencillo. Ahora llega el problema:

+ Necesito indicar que cuando el valor de vida sea 0, cierto clip de película vaya a un determinado fotograma. Es decir, al quedarte sin vidas ( vida = 0 ) el clip gameover vaya y se pare en el fotograma 2. La intención es crear la típica pantalla de Game Over.

Mil gracias por tomaros la molestia de leer mi post.


Atentamente, FABRIC.

Por FABRIC

6 de clabLevel



 

opera
Citar            
MensajeEscrito el 03 Dic 2008 02:52 pm
Debajo de

_root.vida = _root.vida - 1

Pones

if(_root.vida == 0) tuclip.gotoAndPlay("fin")

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 Dic 2008 02:54 pm
Pues...

Código :

if(vida == 0){
ciertoclip.gotoAndStop("GameOver");
}


SI no he entendido mal la pregunta, es eso.....

Por SdR

23 de clabLevel



Genero:Masculino  

opera
Citar            
MensajeEscrito el 03 Dic 2008 03:29 pm
He probado ambos códigos tanto en el root como en el clip de fondo que es el encargado de disminuir la variable vida y no ha resultado. :?

Por FABRIC

6 de clabLevel



 

opera
Citar            
MensajeEscrito el 03 Dic 2008 03:32 pm
Asumo que en vez de ciertoclip, estás usando la ruta al clip de destino.
Y por supuesto que el label GameOver está en esa 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 03 Dic 2008 04:01 pm
Puse el siguiente código en el clip fondo:

Código :

_root.vida = _root.vida - 1
if(_root.vida == 0) _parent.gameover.gotoAndStop(2)


El clip "gameover" está en la línea de tiempo del root.

Por FABRIC

6 de clabLevel



 

opera
Citar            
MensajeEscrito el 03 Dic 2008 04:09 pm
Entonces no tiene mucho misterio, si ves que vida se decrementa y que el clip está allí, no hay mucho mas, ayúdate con un trace:

trace("Vida es "+_root.vida+" el clip gameover es "+_parent.gameover)

Si conoces el uso de _parent, comienza a usarlo en todos los sitios que puedas reemplazando a _root

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 Dic 2008 10:29 pm
Le hice un trace a la variable "vidas" de un texto dinámico.

Código :

trace(_root.vidas)


Y me marca tan solo el valor inicial que le doy en el root. Es decir me da el valor 10 pero no cambia el trace a medida que va disminuyendo la cantidad.

Código :

nivel = 1;
strikes = 0;
vidas = 10;
trace(_root.vidas)


El trace me da 10 como único resultado. La verdad que no entiendo como algo tan aparentemente sencillo no me sale.

Por FABRIC

6 de clabLevel



 

opera
Citar            
MensajeEscrito el 03 Dic 2008 10:35 pm
Entonces esta línea:

_root.vida = _root.vida - 1

Que podría simplificarse así:

_root.vida -= 1

No se está ejecutando, verifícalo

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 Dic 2008 11:10 pm
Claro, ese fotograma se ejecuta una vez. Las sentencias que te hemos dado las tienes que meter en la función donde decrementas la variable vida.....

Por SdR

23 de clabLevel



Genero:Masculino  

opera
Citar            
MensajeEscrito el 05 Dic 2008 01:56 am
Oka. Ya solucioné el problema. La verdad es que tenía el código bastante desordenado. El valor inicial de las variables estaba en el root, en cambio, el código de pulsado y aumento o disminución del valor de las variables estaba dentro de cada clip. Decidí crear un nuevo documento Flash, comenzar desde cero y colocar todo el código en el root. El resultado es una capa para el código de Action Script y otra para los objetos que forman el juego.

Se me ocurrió que sería mejor crear la funciones primeramente y asignarlas a las instancias de los clips que debían realizar dichas acciones. El resultado es el siguiente:

Código :

vidas = 5;
puntos = 0;
function sumar() {
   this.onRelease = function() {
      _root.puntos = _root.puntos+1;
   };
   //trace("BOTON PULSADO");
}

function restar() {
   this.onRelease = function() {
      _root.vidas = _root.vidas-1;
   };
}
function pantalla() {
   if (_root.vidas == 0) {
      this.gotoAndStop(2);
   }
}
function jugar2() {
   _root.gameover.gotoAndStop(1);
}
diana.onEnterFrame = sumar;
fondo.onEnterFrame = restar;
gameover.onEnterFrame = pantalla;
gameover.jugar2.onEnterFrame = jugar2;


Por fin el clip "gameover" automáticamente se posiciona en el fotograma 2. Ahora me surge un nuevo problema, no se ejecuta la función "jugar2". En su lugar, siguen sumándose puntos y restando vidas ( sigue ejecutándose "sumar" y "restar" ).

Me he atascado en este punto, a ver si se os ocurre qué puede estar sucediendo.

Por FABRIC

6 de clabLevel



 

opera
Citar            
MensajeEscrito el 05 Dic 2008 11:39 am
No veo por que no tengan que seguir ejecutándose, ya que han sido declaradas, aunque te vuelvas al otro frame. En todo caso si la intención es volver a jugar, considera una función que reinicialice las variables necesarias

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.