Comunidad de diseño web y desarrollo en internet online

No Código sencillo en AS3 que no funciona

Citar            
MensajeEscrito el 12 Ago 2009 11:52 am
Buenas tardes, estoy programando un código en principio bastante sencillo en Actioscript 3.0, pero no consigo que funcione totalmente como yo quiero.

El clip consta de 96 frames con un stop(); en los frames 1, 24, 48, 72 y 96. El código es el siguiente:

Código ActionScript :

//variables para manejo de la 1º sección
var abrirSec1:Number = 2;
var ultimoSec1:Number = 24;
var cerrarSec1:Number = 25;

//variables para manejo de la 2º sección
var abrirSec2:Number = 49;
var ultimoSec2:Number = 72;
var cerrarSec2:Number = 73;

//Funcion abrir para el boton 1
function abrirBoton1(e:Event) : void
{
    if (this.currentFrame == 1)
    {
        gotoAndPlay(abrirSec1);
    }
   
    if (this.currentFrame == ultimoSec2)
    {
        gotoAndPlay(cerrarSec2);
        gotoAndPlay(abrirSec1);
    }
}

//Funcion abrir para el boton 2
function abrirBoton2(e:Event) : void
{
    if (this.currentFrame == 1)
    {
        gotoAndPlay(abrirSec2);
    }
   
    if (this.currentFrame == ultimoSec1)
    {
        gotoAndPlay(cerrarSec1);
        gotoAndPlay(abrirSec2);
    }
}

//Listeners
boton1.addEventListener(MouseEvent.CLICK, abrirBoton1);
boton2.addEventListener(MouseEvent.CLICK, abrirBoton2);


Basicamente tenemos un escenario con dos botones que abren dos secciones distintas del clip, si pulsamos en el boton 1 se abre la 1ª sección, si volvemos a pulsar ese botón no ocurre nada, ahora bien, si pulsamos en el boton 2 estando abierta la sección 1, pues ésta se cierra y se debe de abrir la sección 2.

La sección 2 tiene el mismo comportamiento que la 1, si estando abierta la seccion 2 pulsamos el botón 2, no pasa nada, pero si pulsamos en 1, la sección 2 se cierra y se abre la sección 1.

¿Que es lo que me occurre con mi código actual?, que estando en el frame 1, si pulsamos el boton 1 se abre la sección 1, pero si pulsamos el botón 2, no se cierra la sección 1, sino que se sitúa en el frame 1 y abre la sección 2.

Simplificando, nunca entra en el segundo if de cada function, se comporta como si cada vez que pulsáramos un botón, lo hiciéramos desde el frame 1, cuando realmente los botones los podemos pulsar desde los frames 1, 24 y 49.

Un saludo.

Por Perico19

39 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 12 Ago 2009 04:21 pm
No se si hoy me levante un poco mas dormido o simplemente me costo trabajo entender un poco lo que estas haciendo :P

Los stop(); que mencionas son una vez que termina cada estado de la animacion no es asi?? abres la seccion1 en el frame 2 y este tiene una animacion hasta "x" frame, despues cierras con una animacion hasta "x" frame.

Tal vez el problema sea en los rangos de cada animacion en lugar de hacer la comparacion en un frame en especifico hazlo dentro del rango ej:

Código ActionScript :

//En lugar de:
if(this.currentFrame==24)
//Pon
if(this.currentFrame>1 && this.currentFrame<=24)
//asi sabras que se encuentra en la seccion1 por si picaran el boton 2 antes de tiempo


Como segunda cosa veo que para cerrar usas dos gotoAndPlay(); uno despues del otro, con esto solo veras la segunda animacion ya que flash no esperara a que se termine la primer animacion para ejecutar la segunda(ya que tu la estas ejecutando al instante) si quieres que espere agrega algun evento de tu eleccion que te indique que termino la animacion.


Me parece mas complicado de lo que deberia la forma en la que checas los estados de tu pelicula podrias probar con algunas banderas:

Código ActionScript :

var sec1:Boolean=false;
var sec2:Boolean=false;

//las activas o desactivas conforme se pulse el boton

function abrirBoton1(e:Event) : void 
{ 
//Como dejamos de checar el frame primero cierras la seccion dos (si esta abierta)

   if(sec2){
         //gotoAndPlay(abrirSec1);--aqui agregas un listener para saber que termino la animacion de cerrar
         addEventListener("Abrir1",Abrir1);
     
        sec2=false;
        gotoAndPlay(cerrarSec2); 
    }else   if (!sec1)//si seccion uno no esta abierta la abres 
    { 
        Abrir1();
    } 
    
} 


function abrirBoton2(e:Event) : void 
{ 


   if(sec1){
         //gotoAndPlay(abrirSec1);--aqui agregas un listener para saber que termino la animacion de cerrar
         addEventListener("Abrir2",Abrir2);
      sec1=false;
       gotoAndPlay(cerrarSec1); 
    }else   if (!sec2)//si seccion dos no esta abierta la abres 
    { 
        Abrir2();
    } 
    
} 




function Abrir1(e:Event=null){
  //remuevo el listener (para que no se abra la seccion uno por algun error)
    removeEventListener("Abrir1",Abrir1);
    sec1=true;  
    gotoAndPlay(abrirSec1); 
}

function Abrir2(e:Event=null){
  //remuevo el listener (para que no se abra la seccion uno por algun error)
    removeEventListener("Abrir2",Abrir2);
    sec2=true;  
    gotoAndPlay(abrirSec2); 
}

//En el ultimo frame de la animacion cerrar despacha los eventos Abrir1 y Abrir2 espectivamente
dispatchEvent(new Event("Abrir1"));



Saludos!! espero que te sirva :)

Por Angel Roberto

Claber

248 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Ago 2009 04:46 pm
Ok, probaré haber que sale, ejejeje.

Por Perico19

39 de clabLevel



Genero:Masculino  

firefox

 

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