Comunidad de diseño web y desarrollo en internet online

Problema para iniciar las animaciones de un mc "hermano"

Citar            
MensajeEscrito el 23 Nov 2013 04:59 pm
Buenas días comunidad,

Estoy empezando en esto del AS3 y me encuentro con un problema curioso a la hora de intentar ejecutar una animación de un mc. Me explicaré mejor:

En un juego tengo la instancia «jugador» el cual tiene en su frame 1 la instancia movie clip «one» (que posee diversas animaciones del jugador: esperar, andar, correr, saltar y agacharse; etiquetadas con esos mismos nombres en sus respectivos frames en la capa "labels"), y en su frame 2 esta la instancia «oneDead» (cuya única función de esta instancia es la animación de la muerte del jugador).
Con la siguiente función (en donde ship=jugador.one) no tengo ningún problema para que se ejecute la animación de la muerte:

Código :

function muerte (e:Event) : void
{
   if ( vida == 0)
   {
   jugadorSano = false;
   vidas --;
      if (vidas == 0) {
      //trace ("no te quedan más vidas, vuelve más tarde");
      marcador.textoVidas.text = vidas;
      jugador.scaleX = 1;
      jugador.gotoAndStop(2);
      }
      else if (vidas >0) {
      marcador.textoVidas.text = vidas;
      vida = 10000;
      jugador.scaleX = 1;
      jugador.gotoAndStop(2); //inicia la animación de la instancia oneDead
      }
   }
}


El problema surge cuando en el último frame (el 40) de la animación de la instacia «oneDead» no consigo que vuelva a ejecutar con corrección la función de las animaciones del jugador siguiente (la cual se encuentra en el mainTimeLine:

Código :

function mover (e:Event): void
{
 //dependiendo si toca suelo hará una u otra cosa
   if (suelo.hitTestPoint (jugador.x, jugador.y+jugador.height/2, true)) { //mientras este sobre el suelo
         while (suelo.hitTestPoint(jugador.x, -2+jugador.y+jugador.height/2, true)){
            jugador.y--; //corrección automática de posición
         }
         if (movArriba) {
            yvel=salto;
            jugador.y += yvel;
            ship.scaleY = 1;
            ship.gotoAndStop("saltar");
            }
         if (movIzquierda){
         //primero miramos si pulsa mayusculas y tiene el cheat correr activado
            if ((cheatCorrer) && (mayusculas)){
               jugador.x -= xvel2;
               ship.scaleX = -1;
               if (jugador.x<=0 + (jugador.width/2)) {
                  jugador.x=30;
               }
               ship.gotoAndStop ("correr")
            }
            else {
               jugador.x -= xvel;
               ship.scaleX = -1;
               if (jugador.x<=0 + (jugador.width/2)) {
                  jugador.x=30;
               }
               ship.gotoAndStop("andar");
            }
         }
         else if (movDerecha){
            if ((cheatCorrer) && (mayusculas)){
               jugador.x += xvel2;
               ship.scaleX= 1;
               if (jugador.x>=stage.stageWidth - (jugador.width/2)) {
                  jugador.x=stage.stageWidth - (jugador.width/2);
               }
               ship.gotoAndStop ("correr")
            }
            else {
               jugador.x += xvel;
               ship.scaleX = 1;
               if (jugador.x>=stage.stageWidth - (jugador.width/2)) {
                  jugador.x=stage.stageWidth - (jugador.width/2);
               }
               ship.gotoAndStop("andar");
            }
         }
         else if (movAbajo){
            ship.scaleY = 1;
            ship.gotoAndStop("agacharse");
         }
         else {
            ship.gotoAndStop(1);
         }
   }
   else if (suelo.hitTestPoint (jugador.x, jugador.y-jugador.height/2, true)) {
         yvel=yvel*-1; //cambia de signo 
         jugador.y += yvel; //disminuye la posicion
         while (suelo.hitTestPoint (jugador.x, jugador.y-jugador.height/2, true)){
               jugador.y++; //corrección automática de posición
               }
         
   }
   else {
      //caída libre del muñeco
      jugador.y +=yvel;
      if (yvel<=limite){
         yvel++;
         }
      if (movIzquierda){//para poder moverlo durante el salto
         jugador.x -= xvel;
         ship.scaleX = -1;
         if (jugador.x<=0 + (jugador.width/2)) {
                  jugador.x=30;
               }
         if (jugador.x>=stage.stageWidth - (jugador.width/2)) {
                  jugador.x=stage.stageWidth - (jugador.width/2);
               }
         ship.gotoAndStop("saltar");
         }
      else if (movDerecha){//para poder moverlo durante el salto
         jugador.x += xvel;
         ship.scaleX = 1;
         if (jugador.x<=0 + (jugador.width/2)) {
                  jugador.x=30;
               }
         if (jugador.x>=stage.stageWidth - (jugador.width/2)) {
                  jugador.x=stage.stageWidth - (jugador.width/2);
               }
         ship.gotoAndStop("saltar");
         }
      else if (movArriba) {//solo por la animación
            ship.scaleY = 1;
            if (jugador.x<=0 + (jugador.width/2)) {
                  jugador.x=30;
               }
            if (jugador.x>=stage.stageWidth - (jugador.width/2)) {
                  jugador.x=stage.stageWidth - (jugador.width/2);
               }
            ship.gotoAndStop("saltar");
            }
      }
}


He intentado con «Object (root).jugador.gotoAndStop(1)» o «…gotoAndStop(“esperar”)» o «MovieClip (root).jugador.gotoAndStop(1)». Así ejecuta la animación del frame “esperar” y ninguna más, aunque el muñeco se mueve igual por la pantalla.

Si pongo MovieClip (this.parent.child).one.gotoAndStop (1); // el error es el 1119.
Sin embargo con MovieClip (this.parent).one.gotoAndStop (1); // el error es el 1009.

Deduzco que algo sucede con la propiedad «one» del moviclip «jugador» pero no sé que puede ser. Por ello os pido ayuda, por favor. ¿Alguien sabe que puede suceder?

Por JoPA

13 de clabLevel



 

chrome
Citar            
MensajeEscrito el 25 Nov 2013 03:28 pm
Me pierdo un poco con tanto código, pero entiendo quieres ir a un fotograma de un MC y lo logras haciendo esto

MovieClip (root).jugador.gotoAndStop(1);

Asi ejecutas la animacion "esperar", que supongo está en el frame 1. Luego tienes otras animaciones que también tienen etiquetas, con lo cual si hicieras

MovieClip (root).jugador.gotoAndStop("etiqueta");

Supongo que iría allí. Que es lo que no logras?

Tip: la síntesis es fundamental para obtener ayuda

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 25 Nov 2013 05:41 pm
Ante todo gracias por tu interés Jorge.

El resto de animaciones los tengo dentro del mc «one» que es "hijo" del mc «jugador», y está en el frame 1 de «jugador». Al estar la animación "esperar" en el primer frame de «one» automáticamente se ejecuta la animación "esperar" pero el resto de las animaciones del mc «one» ya no se ejecutan cuando antes de morir el jugador funcionaban perfectamente.

A ver si con este esquema me explico mejor.

MC «jugador»__________________________
| |
| |
MC «one» ______________ MC «oneDead»
| | | | |
"esperar" "andar" "correr" "saltar" animación "muerte"
frame1 frame2 frame3 frame4 frame1

Si pongo MovieClip (root).jugador.one.gotoAndStop("esperar") el error resultante es el 1009. Como si hubieran desaparecido todas las animaciones de este mc «one» o no se pudiera tener acceso a ellas.

Por JoPA

13 de clabLevel



 

chrome
Citar            
MensajeEscrito el 25 Nov 2013 05:47 pm
A ver si ahora se ve bien el esquema:

JoPA escribió:

Ante todo gracias por tu interés Jorge.

El resto de animaciones los tengo dentro del mc «one» que es "hijo" del mc «jugador», y está en el frame 1 de «jugador». Al estar la animación "esperar" en el primer frame de «one» automáticamente se ejecuta la animación "esperar" pero el resto de las animaciones del mc «one» ya no se ejecutan cuando antes de morir el jugador funcionaban perfectamente.

A ver si con este esquema me explico mejor.

MC «jugador»__________________________
|....................................................................... |
MC «one» _________________.................. MC «oneDead»
|...................|.............|..............|.............................|
"esperar" "andar" "correr" "saltar" ............. animación "muerte"
frame1 frame2 frame3 frame4 .................. frame1

Si pongo MovieClip (root).jugador.one.gotoAndStop("esperar") el error resultante es el 1009. Como si hubieran desaparecido todas las animaciones de este mc «one» o no se pudiera tener acceso a ellas.

Por JoPA

13 de clabLevel



 

chrome
Citar            
MensajeEscrito el 25 Nov 2013 07:45 pm
Debes poner una funcion en MC «jugador» que vaya al fotograma de MC one que necesites, algo como

Código ActionScript :

function ir(etiqueta:String):void{
  one.gotoAndStop(etiqueta)
}


Luego haces

MovieClip (root).jugador.ir("etiqueta");

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 28 Nov 2013 04:21 pm

solisarg escribió:

Debes poner una funcion en MC «jugador» que vaya al fotograma de MC one que necesites, algo como

Código ActionScript :

function ir(etiqueta:String):void{
  one.gotoAndStop(etiqueta)
}


Luego haces

MovieClip (root).jugador.ir("etiqueta");

Jorge

Por JoPA

13 de clabLevel



 

chrome
Citar            
MensajeEscrito el 01 Dic 2013 07:41 pm
Gracias Jorge por tu ayuda.

He tratado de hacer lo que me indicas pero me muestra el TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.

Es el mismo error que surge siempre que se hace referencia a mc "one". Da la sensación de que cuando se ejecuta la animación de la muerte del jugador el mc "one" desaparece del mapa. Como si ya no existiera.

Me está volviendo loco. ¿podría ser que el archivo fla estuviera corrupto?

Por JoPA

13 de clabLevel



 

chrome
Citar            
MensajeEscrito el 02 Dic 2013 12:11 pm
No, simplemente que no está en el escenario al momento de invocar la función, asegúrate de que esté (por ejemplo, si tiene algún gráfico, mira que al momendo de hacerlo ves ese gráfico en pantalla)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 02 Dic 2013 06:35 pm
El gráfico no está en el escenario pues se sustituye "one" por "oneDead" en la función «muerte».... nooooo, ¡leches! realmente no se sustituye (ver función «muerte» publicada en el primer post).

Eso es precisamente lo que está dando problemas. La solución ha pasado por poner: «this.removeChild(this.one)» al inicio del primer if de la función «muerte». Ahora ya no da problemas.

Muchas gracias Jorge, sin tu ayuda jamás habría llegado a este punto.


solisarg escribió:

No, simplemente que no está en el escenario al momento de invocar la función, asegúrate de que esté (por ejemplo, si tiene algún gráfico, mira que al momendo de hacerlo ves ese gráfico en pantalla)

Jorge

Por JoPA

13 de clabLevel



 

chrome

 

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