Comunidad de diseño web y desarrollo en internet online

Error #1009: No se puede acceder a una propiedad o a un método de una

Citar            
MensajeEscrito el 19 Ene 2012 11:19 pm
Hola a todos.

Tengo un Movie clip en la librería y lo estoy usando de la siguiente forma:

1) Creo la instancia
public var mc_val:Mc_val = new Mc_val ();

2) La muestro con el addChild
addChild(mc_val);

3) Dentro del Movie clip tengo un botón y la instancia del botón se llama btn_val

4) Dentro del botón existe una TextFiled con el nombre de instancia txt_val, es un Classic Text, Dynamic Text.

5) El texto text_val se muestra en el Over y en el Down del botón.

6) Cuando se da un click, manda llamar a la función f_ val, para cambiar el texto de txt_val.

mc_val.btn_val.addEventListener(MouseEvent.CLICK, f_ val,false,0,true);

public function f_val (e:MouseEvent):void {
mc_val.btn_val.txt_val.text = "ABIERTA";
}

7) En ejcución marca el error:

TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.

Cualquier ayuda se agradece.

Por lororojo

52 de clabLevel



 

chrome
Citar            
MensajeEscrito el 19 Ene 2012 11:28 pm
cuentanos como esta conformada la linea de tiempo del boton



eXe

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

firefox
Citar            
MensajeEscrito el 20 Ene 2012 12:14 am
La linea de tiempo del boton tiene 2 capas:

La capa etiqueta y la capa boton.

En la capa de etiqueta el UP esta vacio, en el OVER y el DOWN es donde esta el TextFiled Text_val y el HIT esta vacio.

En la capa del boton esta un cuadro relleno simple en el UP, OVER, DOWN y HIT.

Saludos

Por lororojo

52 de clabLevel



 

chrome
Citar            
MensajeEscrito el 20 Ene 2012 12:15 am
Toda la programación esta en el archivo DocumentClass.as

Por lororojo

52 de clabLevel



 

chrome
Citar            
MensajeEscrito el 20 Ene 2012 01:58 am
Bien,, tu boton entonces es un SimpleButton

para poder acceder al textfield dentro del button tendras q hacer lo siguiente:

Código ActionScript :

import flash.events.MouseEvent;
import flash.display.DisplayObjectContainer;
import flash.display.DisplayObject;
import flash.text.TextField;

.....

mc_val.btn_val.addEventListener(MouseEvent.CLICK, handlerClick);
function handlerClick(e:MouseEvent):void
{
   var container:DisplayObjectContainer = mc_val.btn_val.overState as DisplayObjectContainer;
   var texto:TextField = container.getChildAt(1) as TextField;
   texto.text = 'ABIERTO';      
}
.....


lo que hacemos al detectar el click en el boton es obtener el OVER del boton, que es un contenedor donde esta el textfield y con getChildAt(1) conseguimos dicho textfield

Te dejo un tuto donde habla un poco de la clase SimpleButton

http://www.cristalab.com/tutoriales/la-clase-simplebutton-de-actionscript-3-c31898l/


Saludos


eXe

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

firefox
Citar            
MensajeEscrito el 20 Ene 2012 02:30 am
SI es un botón esas acciones la puedes hacer directamente en la "linea de tiempo" del botón,
de lo contrario siendo este un mc de esta manera tiene que andar bien

Código :

package {
   
   import flash.display.MovieClip;
   import flash.events.Event;
   import flash.events.TextEvent;
   import flash.events.MouseEvent;
   //

   
   public class Main extends MovieClip{ 
   
   public var mc_bot:boton_mc= new boton_mc();;
   
    public function Main():void{
      
      
      addChild(mc_bot)
      mc_bot.x= 250;
      mc_bot.y = 100;
      mc_bot._btn.addEventListener(MouseEvent.MOUSE_DOWN, changeTxt);

}   

   function changeTxt(evento:Event):void{
      //trace("Mouse down")
      mc_bot._btn.txt_btn.text = String("Hola")
      }

   
   }
}




saludos Maxx

Por MaxiiSan20

Claber

168 de clabLevel



Genero:Masculino  

Montevideo

firefox
Citar            
MensajeEscrito el 20 Ene 2012 02:53 am
Hola exekiel21 probe lo siguiente poniendo en el archivo *.as del boton:


Código ActionScript :

package misclases {
   
   import flash.display.SimpleButton;
   
   import flash.events.MouseEvent;
   import flash.display.DisplayObjectContainer;
   import flash.display.DisplayObject;
   import flash.text.TextField;
   
    public class Btn_val_purga_prncipal_val_1 extends SimpleButton {
      
      public function Btn_val_purga_prncipal_val_1() {
         
         mc_val_purga_pricipal.btn_val_1.addEventListener(MouseEvent.CLICK, handlerClick);
         
         function handlerClick(e:MouseEvent):void {
               var container:DisplayObjectContainer = mc_val_purga_pricipal.btn_val_1.overState as DisplayObjectContainer;
               var txt_val_1:TextField = container.getChildAt(1) as TextField;
               txt_val_1.text = 'ABIERTO';      
         }         
            
      }
   }
   
}


Y marca el error: 1120 accesando a una propiedad indefinida del MovieClip mc_val_purga_pricipal

Por lororojo

52 de clabLevel



 

chrome
Citar            
MensajeEscrito el 20 Ene 2012 02:58 am
Y si lo pongo en el archivo DocumentClass

Código ActionScript :

   import flash.events.MouseEvent;
   import flash.display.DisplayObjectContainer;
   import flash.display.DisplayObject;
   import flash.text.TextField;


Código ActionScript :

mc_val_purga_pricipal.btn_val_1.addEventListener(MouseEvent.CLICK, f_pc_val_purga_pricipal_btn_val_1,false,0,true);   



Código ActionScript :

      public function f_pc_val_purga_pricipal_btn_val_1(e:MouseEvent):void {

            var container:DisplayObjectContainer = mc_val_purga_pricipal.btn_val_1.overState as DisplayObjectContainer;
              var txt_val_1:TextField = container.getChildAt(1) as TextField;
              txt_val_1.text = 'ABIERTO';    

      }   



Marca error en tiempo de ejecución:
Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.
at Document_class/f_pc_val_purga_pricipal_btn_val_1()

Por lororojo

52 de clabLevel



 

chrome
Citar            
MensajeEscrito el 20 Ene 2012 02:22 pm

lororojo escribió:

Y si lo pongo en el archivo DocumentClass


quedate con esa opcion.

Revisa que el textfield sea tipo dinamico y dale nombre de instancia, tanto en over como en down.

Si no es eso, has un trace de numChildren del container y ve variando getChildAt desde 0 a numChildren-1:
[as]
trace(container.numChildren)
[as]



eXe

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

chrome
Citar            
MensajeEscrito el 20 Ene 2012 04:22 pm
Gracias por tu ayuda eXe. :)

Al hacer el trace(mc_val_purga_pricipal.numChildren); = el resultado es 7

Probe con el numero 2 el getChildAt y funciono bien.

Tuve que repetir la funcion para el overState y downState para que la etiqueta cambie en los 2 estados.

Código ActionScript :

 
public function f_pc_val_purga_pricipal_btn_val_1(e:MouseEvent):void {

   trace(mc_val_purga_pricipal.numChildren);

    var container1:DisplayObjectContainer = mc_val_purga_pricipal.btn_val_1.overState as DisplayObjectContainer;
   var txt_val_1:TextField = container1.getChildAt(2) as TextField;
   txt_val_1.text = 'ABIERTO';

  var container2:DisplayObjectContainer = mc_val_purga_pricipal.btn_val_1.downState as DisplayObjectContainer;
  var txt_val_1b:TextField = container2.getChildAt(2) as TextField;
   txt_val_1b.text = 'ABIERTO';
}


¿Existe alguna forma de obtener el numero para este caso el 2, de otra forma que nos sea a prueba y error? :?

Ya que puedo llegar a tener hasta 30 válvulas diferentes o sea hasta 30 botones diferentes

Sigo probando, si encuentro algo lo subo

Nuevamente gracias :D

Por lororojo

52 de clabLevel



 

chrome
Citar            
MensajeEscrito el 20 Ene 2012 04:53 pm
En ese caso te recomiendo que en cada layer haya un solo objecto. Empiezas a contar desde el layer de abajo en 0 hasta el layer donde se encuentre tu textfield y te sera mas facil poder cambiarle el texto.

Sinceramente no soy de usar Simplebutton,,, prefiero crear yo mis propios botones usando movieclips y clases. Viendo lo que te sucedio ya lo elimine por completo de las posibilidades de crear un boton con esa clase.


abrazo


eXe

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

chrome
Citar            
MensajeEscrito el 20 Ene 2012 04:54 pm
Una comentario mas:

Se llama SimpleButton,,,, no le pidas demasiado...jajaja



eXe

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

chrome
Citar            
MensajeEscrito el 20 Ene 2012 05:07 pm
eXe

Tendrás un ejemplo o link de como hacer un botón mediante movieClip con los estados:
- UP
- Over
- Down
- Hit

Saludos

Por lororojo

52 de clabLevel



 

chrome
Citar            
MensajeEscrito el 20 Ene 2012 06:57 pm
No encontre ningun buen tuto para pasarte.

Basicamente te creas una clase llamada por ejemplo Boton,,, la cual vas a asignar como clase base en cada boton que tengas desde dentro del flash. Para eso tenes q activar exportar para actionscrip primero.

El clip tiene que tener las animaciones cuando pasa de out a over y viceversa y para cuando hace mouse down. El texto lo agregas en el layer mas alto y alargas sus frames para que aparesca en todos los casos. Teniendo esto,, desde la clase Boton podes controlar lo que se debe mostrar en cada caso.

Siempre dependera de la complejidad de tus botones.

Tip: algo indispensable es asignarle a la clase mouseChildren = false; o al clip dentro del boton que contenga algun texto. Y por ultimo si quieres asignarle buttonMode = true para que se vea la manito como de un link html.

Éxitos


eXe

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

chrome
Citar            
MensajeEscrito el 20 Ene 2012 08:33 pm
Probaste con la ayuda de flash
?

Por MaxiiSan20

Claber

168 de clabLevel



Genero:Masculino  

Montevideo

firefox
Citar            
MensajeEscrito el 20 Ene 2012 08:54 pm
No se pero no entiendo por que tanto embrollo, para lo que propones si mal no entendí,
que es tener un Media Clip en el stage llamado desde la librería y asignarle las propiedades ROLL_OVER, ROLL_OUT y Click y que ala ves cambie un texto dentro del MC? estoy errado ¿?



Algo como esto?

Saludos Maxx

Por MaxiiSan20

Claber

168 de clabLevel



Genero:Masculino  

Montevideo

firefox
Citar            
MensajeEscrito el 20 Ene 2012 09:35 pm
Creo que el embrollo ya fue resuelto



eXe

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

chrome
Citar            
MensajeEscrito el 20 Ene 2012 11:18 pm
Muchas gracias por tu ayuda eXe :D El problema quedo resuelto para el SimpleButton.

Voy a probar ahora con el MovieClip como boton y tomar tus sugerencias y las de MaxiiSan20.

Saludos

Por lororojo

52 de clabLevel



 

chrome

 

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