Comunidad de diseño web y desarrollo en internet online

duda básica (as3)

Citar            
MensajeEscrito el 20 Mar 2010 06:56 pm
Hola a todos mas una vez.... Gracias por cualquier ayuda que pueda obtener desde aquí.

Con el siguiente código en el trace tengo pg1 y pg2.
Mi duda es.:
Como puedo hacer para que al hacer clic en el botón, al envés de acceder a pg1 y pg2 ir pasando primero pg1 después pg2.

Código ActionScript :

 
var paginas_total:Array=new Array("pg1","pg2"); 
var paginas:Number=paginas_total.length; 
var i:Number=0; 

var boton = new btn_1(); 
boton.buttonMode=true; 
boton.x=0; 
boton.y=0; 
boton.addEventListener(MouseEvent.CLICK,btn_click); 
stage.addChild(boton); 

function btn_click(e:MouseEvent):void { 

   for (i=0; i<paginas; i++) { 
      trace(paginas_total[i]); 
   } 
}

Por fininhop

18 de clabLevel



 

safari
Citar            
MensajeEscrito el 20 Mar 2010 07:57 pm
Si el array esta ordenado como corresponde (pag1, pag2, pag3, etc) sería algo así:

Código ActionScript :

var paginas_total:Array=new Array("pg1","pg2");  
var paginas:Number=paginas_total.length;  
var i:Number=0;  
 
var boton = new btn_1();  
boton.buttonMode=true;  
boton.x=0;  
boton.y=0;  
boton.addEventListener(MouseEvent.CLICK,btn_click);  
stage.addChild(boton);  
 
function btn_click(e:MouseEvent):void {
     trace(paginas_total[i]);
     i++; //aca incremento en 1 el valor de i para que la proxima vez que se pulse el boton lea el siguiente elemento del array
} 


Saludos

Por GustavoV

Claber

136 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 20 Mar 2010 08:07 pm
segun entiendo, simulas un libro y lo que queres es que se pase pagina por pagina hasta la que se selecciono, me equivoco?

lo que deberias hacer es mantener en una variable el numero de pagina en la q estas ( asi si estoy en la pagina 50 quiero ir a la 100 no paso por todas las anteriores )

deberias hacer algo asi:

Código ActionScript :

var pagina_actual:uint = 0;
var pagina_final:uint;
var timer:Timer = new Timer ( 1000 ); // ahi pones la demora de pase de pagina en milisegundos

function irA ( pagina:uint ) : void
{
     if ( pagina >= paginas_total.length || pagina == pagina_actual )    {   return;  }
     
     if ( pagina > pagina_actual )
     {
          timer.addEventListener ( TimerEvent.TIMER , avanzar );
     }
     else
     {
          timer.addEventListener ( TimerEvent.TIMER , retroceder );
     }

     pagina_final = pagina;
     timer.start ( );
}

function avanzar ( event:TimerEvent ) : void
{
     pagina_actual++;
     trace ( paginas_total [ pagina_actual ] );
     
     if ( pagina_actual == pagina_final )
     {
          timer.removeEventListener ( TimerEvent.TIMER , avanzar );
          timer.stop ( );
     }
}

function retroceder ( event:TimerEvent ) : void
{
     pagina_actual--;
     trace ( paginas_total [ pagina_actual ] );

      if ( pagina_actual == pagina_final )
     {
          timer.removeEventListener ( TimerEvent.TIMER , retroceder );
          timer.stop ( );
     }
}



llamando la funcion irA ( ) le pasas como paarmetro el numero de pagina a la que queres ir

no probe el codigo asique no se si funciona bien, pero deberia darte una idea ( espero )

Suerte :)

Por voices

43 de clabLevel



 

chrome
Citar            
MensajeEscrito el 21 Mar 2010 01:59 pm
Yo os agradezco a los dos realmente fue bastante esclarecedor mas que nada por el tema de entender un poco mas como funciona esto de las variables numéricas que realmente me tiene loco porque es algo que me resulta de lo mas complicado que hay.

GustavoV con este código si me a funcionado lo de pasar hacia delante las paginas una a una, que es lo que yo preguntaba antes con el código que postule. Ahora perdona mi ignorancia pero no entiendo porque no utilizaste el for, en realidad que es lo que hace el for entonces? Es que no consigo entenderlo. Ya he leído algo en otros foros y mismo en la documentación de adobe pero aun me parece chino. Cualquier link explicativo o explicación adicional me será de enorme ayuda para poder entender un poquito mas de as3.

Voices esto que postulaste es exactamente lo que quiero hacer. Como si fuera un libro pasar y retroceder las paginas una a una. He puesto entonces dos botones en la escena con addChild y me va estupendo. Puedo pasar y incluso retroceder las paginas. Ahora, hay una parte del código que postulaste donde remueves el evento timer y esto es una otra cosa que también estoy por entender. En los botones que he puesto en la escena tengo también que remover el evento del mouse y he estado haciendo pruebas utilizando el código que postulaste para intentar hacer lo mismo que hiciste con el timer al remover su evento, en los botones, pero igual no lo tengo muy claro lo del if y lo del else (si y si no, en ingles). La lógica puedo entender pero al momento de aplicar esto me dan todos los tipos de errores. Lo mismo que he dicho a Gustavo, digo otra vez, cualquier información adicional o link me seria de gran ayuda.

No lo se si debería de hacer otro post, porque ya puedo pasar y incluso retroceder las paginas, o si por aquí mismo me podrían vosotros ayudar un poquito mas.

De todas formas muchas gracias a vosotros por el empeño que habéis puesto en ayudarme esto ya me será de gran ayuda.
GRACIAS......!

Por fininhop

18 de clabLevel



 

safari
Citar            
MensajeEscrito el 22 Mar 2010 01:48 am
lo de agregar o sacar el timer, es simplemente por esto:

al timer se le asignan 2 valores numericos durante su instanciacion

var timer:Timer = new Timer ( 1000 , 2 );

imaginate como si fuera una alarma, vos con el primer parametro ( 1000 ) que le pasas, le decis cada cuantos milisegundos queres q suene, es decir que 1000 = 1 segundo, y por lo tanto el timer sonara cada 1 segundo.

el otro numero ( 2 ) es la cantidad de veces que queres que el timer suene antes de apagarse. es decir que en este ejemplo, el timer sonara cada 1 segundo, y lo hara solo 2 veces.

si en vez de 2, hubiera puesto 0, el timer sonaria cada 1 segundo infinitamente. en el codigo que te pase antes hice esto:

new Timer ( 1000 );

al no especificar segundo parametro, la clase timer agrega ese paramero por mi, con un numero predeterminado, que es el 0.

ahora te voy a explicar los 2 eventos ( en mi opinion ) mas utiles del timer:

TIMER.TIMER_COMLETE
TIMER.TIMER

el primero, lanza un evento solo cuando el timer termino, es decir siguiendo el primer ejemplo ( new Timer ( 1000 , 2 ) ) que
lo hara luego de sonar las 2 veces que le pedi que sonara.

el otro evento en cambio se lanza cada vez que el timer SUENA, por lo que nuestro timer lanzaria 2 eventos Timer y 1 TIMER_COMPLETE

en el codigo que te pase, puse que el timer se lance infinitamente cada 1 segundo

Código ActionScript :

var timer:Timer = new Timer ( 1000 );

timer.addEventListener ( TimerEvent.TIMER , cuando_suena );

timer.start ( );

function cuando_suena ( event:TimerEvent ) : void
{
     trace ( "SONO!!!" );
}


y lo que hice fue que cda vez que sonara, pasara una pagina.

los if y else, son para evitar que el timer continue pasando paginas infinitamente, ya que com ote explique antes, sonaria para siempre.

entonces mantenia la referencia de la pagina por la cual el timer estaba, y otra variable con el numero de pag a la cual debia llegar. una vez que estos numeros son iguales, significa que el timer llego a su destino, por lo cual debiamos detenerlo usando

timer.stop ( );

lo de remover los "listeners", es simplemente porque teniamos 2 listeners, uno para avanzar pagina y otro para retrocerla, por lo tanto, quitamos el listener para evitar conflictos.

espero haber aclarado, ya que no lo hago a proposito, pero siempre olvido agregar comentarios explicativos en mis codigos

xD

Por voices

43 de clabLevel



 

chrome

 

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