Comunidad de diseño web y desarrollo en internet online

reinicializar Clase !

Citar            
MensajeEscrito el 10 Jun 2011 03:27 pm
Hola!!!

estoy haciendo la smulacion de un telefono

tengo cuatro frames
con un boton mando al cuarto frame y ahi un texto dinamico me imprime el numero que he marcado en el primer frame.

hasta ahi bien

tengo botones para navegar por los frames, pero cuando regreso al frame 1 el teclado ya no me funciona, ya los botones que escriben en el txt dinamico no sirven, epro tampoco da error

Como reinicializo la clase al regresar al FRAME 1?


gracias

mi code:

Código ActionScript :


         uno_btn.addEventListener(MouseEvent.CLICK, Action);   
         dos_btn.addEventListener(MouseEvent.CLICK, Action); 
 
... 
 
private function Action (e:MouseEvent):void {    
            var selec:Object= new Object();  
            selec= e.currentTarget;  
            switch(selec){  
               case uno_btn:  
               campo_txt.appendText("1"),  
               addInArray("1"); 
               break;  
                
               case dos_btn:  
               campo_txt.appendText("2"),  
               addInArray("2"); 
               break; 
} 
} 
 
 
... 
 
private function addInArray(dat):void{ 
            micampo[contador]= dat;contador++; 
 
            } 
                
          
         private function back(e:MouseEvent):void{   
            campo_txt.text="";  
            for (var i=0; i < micampo.length-1 ; i++ ){ 
               campo_txt.appendText(micampo[i]); 
            } 
            micampo.pop();  
            contador-- ; 
            if (contador <= 0){ 
               contador =0;  
            } 
            } 

Por dianita666

Claber

185 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Jun 2011 03:31 pm
Consejo: inicializa todo en un frame por el que no vuelvas a pasar, sino duplicas los addEventListeners, etc
Para usar clases deberías olvidarte del timeline, ir frame a frame con AS3 da mas problemas que soluciones

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 10 Jun 2011 03:40 pm
pero todo lo tengo desde el primer frame, estoy trabajando con clases

cuando necesito acceder a un frame especifico lo hago con current frame

que opinas?

Por dianita666

Claber

185 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Jun 2011 04:05 pm
No entiendo tu estructura. ¿La clase es un document class?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 10 Jun 2011 04:12 pm
si


..
no puse toda clase, sino las funciones del teclado

la funcion back es un borrador que esta en el teclado

Por dianita666

Claber

185 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Jun 2011 04:13 pm
Entonces no hay relación necesaria entre fotogramas y código que se ejecuta. Esto por ejemplo>

uno_btn.addEventListener(MouseEvent.CLICK, Action);

Se debería ejecutar en el constructor, o en un método init y no volverse a ejecutar.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 10 Jun 2011 04:23 pm
mira esta es mi funcion constructora:

Código ActionScript :

public function Telefono(){
         
         this.stop();
         
         marcar_mc.visible=false;

         
         addEventListener(Event.ADDED_TO_STAGE, initApp);
         addEventListener(Event.REMOVED_FROM_STAGE, removedApp);
         
         hora_txt.addEventListener(Event.ENTER_FRAME,ObtenerHora);
         
         marcacion_mc.gotoAndStop(2);
         registro_mc.stop();
         contactos_mc.stop();
         
         marcacion_mc.addEventListener(MouseEvent.CLICK, llamar);
         registro_mc.addEventListener(MouseEvent.CLICK, llamadas);
         contactos_mc.addEventListener(MouseEvent.CLICK, contactos);
         
         
         
         uno_btn.addEventListener(MouseEvent.CLICK, Action);  
         dos_btn.addEventListener(MouseEvent.CLICK, Action);
         tres_btn.addEventListener(MouseEvent.CLICK, Action);  
         cuatro_btn.addEventListener(MouseEvent.CLICK, Action); 
         cinco_btn.addEventListener(MouseEvent.CLICK, Action);  
         seis_btn.addEventListener(MouseEvent.CLICK, Action); 
         siete_btn.addEventListener(MouseEvent.CLICK, Action);  
         ocho_btn.addEventListener(MouseEvent.CLICK, Action);
         nueve_btn.addEventListener(MouseEvent.CLICK, Action);  
         asterisco_btn.addEventListener(MouseEvent.CLICK, Action); 
         cero_btn.addEventListener(MouseEvent.CLICK, Action); 
         numeral_btn.addEventListener(MouseEvent.CLICK, Action); 
         
         borrar_btn.addEventListener(MouseEvent.CLICK, back);
         llamar_mc.addEventListener(MouseEvent.CLICK, llamando);
         
         }


puse los listeners de los botones en initApp() pero me da igual

Por dianita666

Claber

185 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Jun 2011 05:27 pm
Agrega un trace en el constructor, si es un document class no se debería volver a ejecutar, ahora si en el primer frame tienes algo como new Telefono() o es una clase asociada a un MovieClip, entonces si puede ser que se repita

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Jun 2011 12:48 pm
Hola Jorge

puse el trace en el constructor y en la funcion initApp
y en ninguna de las dos se vuelve a ejecutar cuando vuelvo al primer frame

mi codigo esta solo en la clase, en el .fla no tengo codigo

que hago para que se vuelva aejecutar?

gracias

Por dianita666

Claber

185 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Jun 2011 01:27 pm
Ok, si los botones no te funcionan, posiblemente los hagas desaparecer en frames mas adelante, ¿que pasa si vuelves a ejecutar init cuando regresas al primer frame?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Jun 2011 01:47 pm
te refieres a initapp?

puse en en initapp los listeners de los botones pero da igual

Por dianita666

Claber

185 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Jun 2011 01:49 pm
Vuelve a hacer el addEventListener, donde sea que lo tengas

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Jun 2011 01:58 pm
nada ,no da

efectivamente tengo estos botones solo en el primer frame, tengo 4 frames y cada uno es una "escena" distinta

posteo todo mi code,

Código ActionScript :

package clases{
   
   
   import flash.display.MovieClip;
   import flash.text.*;
   import flash.events.*;
   import flash.display.SimpleButton;
   
   import com.greensock.*;
   import com.greensock.easing.*;



   public class Telefono extends MovieClip{

      
      private var micampo:Array= new Array(); 
      private var contador:Number=0;
      private var almacen:String;
      
      


      
      public function Telefono(){
         
         this.stop();

         
         marcar_mc.visible=false;

         
         addEventListener(Event.ADDED_TO_STAGE, initApp);
         addEventListener(Event.REMOVED_FROM_STAGE, removedApp);
         
         hora_txt.addEventListener(Event.ENTER_FRAME,ObtenerHora);
         
         marcacion_mc.gotoAndStop(2);
         registro_mc.stop();
         contactos_mc.stop();
         
         marcacion_mc.addEventListener(MouseEvent.CLICK, llamar);
         registro_mc.addEventListener(MouseEvent.CLICK, llamadas);
         contactos_mc.addEventListener(MouseEvent.CLICK, contactos);
         
         

         uno_btn.addEventListener(MouseEvent.CLICK, Action);  
         dos_btn.addEventListener(MouseEvent.CLICK, Action);
         tres_btn.addEventListener(MouseEvent.CLICK, Action);  
         cuatro_btn.addEventListener(MouseEvent.CLICK, Action); 
         cinco_btn.addEventListener(MouseEvent.CLICK, Action);  
         seis_btn.addEventListener(MouseEvent.CLICK, Action); 
         siete_btn.addEventListener(MouseEvent.CLICK, Action);  
         ocho_btn.addEventListener(MouseEvent.CLICK, Action);
         nueve_btn.addEventListener(MouseEvent.CLICK, Action);  
         asterisco_btn.addEventListener(MouseEvent.CLICK, Action); 
         cero_btn.addEventListener(MouseEvent.CLICK, Action); 
         numeral_btn.addEventListener(MouseEvent.CLICK, Action); 
         
         borrar_btn.addEventListener(MouseEvent.CLICK, back);
         llamar_mc.addEventListener(MouseEvent.CLICK, llamando);
         
         }
         
      private function initApp(e:Event):void{
         atras_mc.addEventListener(MouseEvent.CLICK,atras);
         colgar_mc.addEventListener(MouseEvent.CLICK,closeHandler);
      }
      
      private function removedApp(e:Event):void{
      }
      

         /*private function colgarCerrar(e:MouseEvent){
            if(this.currentFrame==1){
            closeHandler(e);
            }else{
               this.gotoAndStop(1);
            }
            }*/
      
          private function closeHandler(e:MouseEvent):void{
            dispatchEvent(new Event("closeSWFLLAMAR"));
         }
         
         private function atras(e:MouseEvent):void{
               if((this.currentFrame==2) || (this.currentFrame==3) || (this.currentFrame==4)){
                  this.gotoAndStop(1);
                  marcar_mc.visible=false;
               }else{
               closeHandler(e);
               }
         }
         
            
         private function ObtenerHora(event:Event):void {
            var hora:Date=new Date();
            var minutos=hora.getMinutes();
            var horas=hora.getHours();
            if (horas>=13) {
                horas=horas-12;
               }
            if (String(minutos).length == 1) {    
                   minutos="0"+minutos; 
               } 
             hora_txt.text = horas+":"+minutos;
         }
         
         
         private function llamar(e:MouseEvent):void{
            this.gotoAndStop(1);
            registro_mc.gotoAndStop(1);
            marcacion_mc.gotoAndStop(2);
            contactos_mc.gotoAndStop(1);
            addEventListener(Event.ADDED_TO_STAGE, initApp);
         }
            
         private function llamadas(e:MouseEvent):void{
            this.gotoAndStop(2);
            registro_mc.gotoAndStop(2);
            marcacion_mc.gotoAndStop(1);
            contactos_mc.gotoAndStop(1);
            
         }
         
         private function contactos(e:MouseEvent):void{
            this.gotoAndStop(3);
            registro_mc.gotoAndStop(1);
            marcacion_mc.gotoAndStop(1);
            contactos_mc.gotoAndStop(2);
            
         }
         
         
         private function Action (e:MouseEvent):void {   
            var selec:Object= new Object(); 
            selec= e.currentTarget; 
            switch(selec){ 
               case uno_btn: 
               campo_txt.appendText("1"), 
               addInArray("1");

               break; 
               
               case dos_btn: 
               campo_txt.appendText("2"), 
               addInArray("2");
               break;
               
               case tres_btn: 
               campo_txt.appendText("3"), 
               addInArray("3");
               break;
               
               case cuatro_btn: 
               campo_txt.appendText("4"), 
               addInArray("4");
               break;
               
               case cinco_btn: 
               campo_txt.appendText("5"), 
               addInArray("5");
               break;
               
               case seis_btn: 
               campo_txt.appendText("6"), 
               addInArray("6");
               break;
               
               case siete_btn: 
               campo_txt.appendText("7"), 
               addInArray("7");
               break;
               
               case ocho_btn: 
               campo_txt.appendText("8"), 
               addInArray("8");
               break;
               
               case nueve_btn: 
               campo_txt.appendText("9"), 
               addInArray("9");
               break;
               
               case asterisco_btn: 
               campo_txt.appendText("*"), 
               addInArray("*");
               break;
               
               case cero_btn: 
               campo_txt.appendText("0"), 
               addInArray("0");
               break;
               
                case numeral_btn: 
               campo_txt.appendText("#"), 
               addInArray("#");
               break;
               }
         }
         
         
         private function addInArray(dat):void{
            micampo[contador]= dat;contador++;

            }
               
         
         private function back(e:MouseEvent):void{  
            campo_txt.text=""; 
            for (var i=0; i < micampo.length-1 ; i++ ){
               campo_txt.appendText(micampo[i]);
            }
            micampo.pop(); 
            contador-- ;
            if (contador <= 0){
               contador =0; 
            }
            }

            
         private function llamando(e:MouseEvent):void{  
               almacen=campo_txt.text;
               this.gotoAndStop(4);
               imprimirTXT();
         }
         
         private function imprimirTXT():void{
            if  (this.currentFrame==4) {
               marcar_mc.visible=true;
               marcar_mc.marcacion_txt.text = almacen;
               marcar_mc.numero_txt.text ="Mi número: # desconocido";
            }
         }

            }
            }


que sera?

Por dianita666

Claber

185 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Jun 2011 02:06 pm
Si el botón desaparece, posiblemente se pierdan los listener, peurba volver a agregarlos, es decir prueba lo contrario de lo que te dije al principio, ya que tu estructura, aún usando clases, está atada al timeline. Ahora mismo solo se declaran en el constructor, es decir siendo un document class, jamás se vuelve a ejecutar

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Jun 2011 02:16 pm
repeti los listener en varias partes, probando, pero nada

cuando los puse en la funcion llamar me da error:

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


pero estoy intentando otra cosa que es tener estos botones en todos los frames y hacerlos visibles y enabled cuando necesito,

pero donde exacytmente pogo esto?
creo que tengo condicionales por todos lados
como unificarlos?
que opinas?

Por dianita666

Claber

185 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Jun 2011 02:33 pm
El problema viene básicamente de la estructura: en la medida que pienses en timeline, atentarás contra el diseño en objetos ... pero lleva un tiempo eso. Puedes meter todos los botones en un clip llamado botonera (corrigiendo las rutas cuando fuera necesaria) luego ocultas ese clip, no cada botón

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Jun 2011 02:37 pm
jorge me hiciste ver mi error
y es que los listeners llaman a objetos que esten en toda la peli
asi que lo solucione con dos sencillas funciones:

Código ActionScript :

private function mostrarTeclado(){
            teclado_mc.enabled=true;
            teclado_mc.mouseChildren=true;
         }
         
         private function ocultarTeclado(){
            teclado_mc.enabled=false;
            teclado_mc.mouseChildren=false;
         }


llmandolas en los condicionales que me mueven en la timeline.

eso ya esta solucionado

ahora surgio un problemilla y es uq cuando regreso al primer frame y oprimo borrador (borrar_btn) antres de comenzar a borrar me aparece el texto almacenado previamente.

como hago para que al volver al primer frame me borre la variable almacen ?

esta es la funcion para el boton borrar:

Código ActionScript :

private function back(e:MouseEvent):void{  
            campo_txt.text=""; 
            for (var i=0; i < micampo.length-1 ; i++ ){
               campo_txt.appendText(micampo[i]);
            }
            micampo.pop(); 
            contador-- ;
            if (contador <= 0){
               contador =0; 
            }
            }


Gracias

Por dianita666

Claber

185 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Jun 2011 02:47 pm
Si tenías el valor en micampo, al volver al frame uno tienes que hacer

micampo = ""

O si es un array

micampo.splice(0)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Jun 2011 03:04 pm
puse micampo.splice(0);
en la funcion back y funciona a medias, si me borra la variable pero al oprimir borrar_btn me borra todo el campo en vez de borrar solo el ultimo numero, como deberia

donde debo ponerla?

Por dianita666

Claber

185 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Jun 2011 03:06 pm
¿Donde lo pusiste?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Jun 2011 03:11 pm
aca

Código ActionScript :

private function back(e:MouseEvent):void{ 
         micampo.splice(0);
            campo_txt.text=""; 
            for (var i=0; i < micampo.length-1 ; i++ ){
               campo_txt.appendText(micampo[i]);
            }
            micampo.pop(); 
            contador-- ;
            if (contador <= 0){
               contador =0; 
            }
            }


tambien probe dentro del bucle y dentro del if
pero sucede lo que te conte

Por dianita666

Claber

185 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Jun 2011 03:14 pm
Dije cuando vuelves al frame 1, no cuando le das al botón back, si lo pones ahí, siempre borras todo.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Jun 2011 03:18 pm
tambien lo puse en la funcion atras, que es la que me lleva al frame1 y me da este error:

Código ActionScript :

private function atras(e:MouseEvent):void{
               if((this.currentFrame==2) || (this.currentFrame==3) || (this.currentFrame==4)){
                  this.gotoAndStop(1);
                  marcar_mc.visible=false;
                  mostrarTeclado();
                  micampo.splice(0);
               }else{
               closeHandler(e);
               }
         }


TypeError: Error #2007: El valor del parámetro text debe ser distinto de null.
at flash.text::TextField/replaceText()
at flash.text::TextField/appendText()
at clases::Telefono/::back()

Por dianita666

Claber

185 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Jun 2011 03:23 pm
Eso es porque en la función back asumes que hay algo escrito ... ¿pero que pasa sino? Si

ir(micampo.length<=0) return;

No se debe ejecutar nada de la función back

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Jun 2011 03:37 pm
pero es que el error no me da cuando el campo esta vacio sino cuando escribo algo

Por dianita666

Claber

185 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Jun 2011 03:59 pm
El error lo canta en back:

at clases::Telefono/::back()

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Jun 2011 04:19 pm
le di
if(micampo.length>0) return;

dentro de back pero da igual
que sera?

Por dianita666

Claber

185 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Jun 2011 04:26 pm
Si lo pusiste antes del loop no debería pasar, pero sino se ejecuta esto>

campo_txt.appendText(micampo[i]);

Y micampo[i] está vacío

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Jun 2011 05:57 pm
da igual Jorge.

o me borra todo o me da error

Por dianita666

Claber

185 de clabLevel



 

firefox

 

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