Comunidad de diseño web y desarrollo en internet online

Ayuda con OOP

Citar            
MensajeEscrito el 17 Nov 2005 06:31 pm
Muy buenas chicos.. a ver tengo el siguiente problemilla con la estructura de una clase, seguro que es una chorrada.. pero en fin que no me sale..

La clase es ésta, bueno a simples rasgos:

Código :

class Boton{
   //Propiedades
   var boton_MC:MovieClip;
   var texto_OVER:String;
   var texto_OUT:String;
   
   //Constructor
   public function Boton(boton:MovieClip, over:String, out:String){
      this.boton_MC = boton;
      this.texto_OVER = over;
      this.texto_OUT = out;
      activaBoton();
   }
   
   //Metodos
   private function activaBoton(){
      this.boton_MC.onRollOver = botonOVER;
      this.boton_MC.onRollOut = botonOUT;
   }
   private function botonOVER(){
      textoOVER();
   }
   private function botonOUT(){
      textoOUT();
   }
   private function textoOVER(){
      trace(texto_OVER);
   }
   private function textoOUT(){
      trace(texto_OUT);
   }
}


Y la llamo así:

Código :

import Boton;
var boton_MC:Boton = new Boton(miBoton, "Hola", "Adios");


Pues según el código de la clase, al hacer rollOver me debería salir el trace con "Hola" y al rollOut el trace con el "Adios".

Pues resulta que no me sale nada de nada.

He intentado de todo, pero no soy capaz de acceder a texto_OVER desde el onRollOver del boton.

En fin.. alguna idea?? Gracias de antemano.

Por johanFX

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 17 Nov 2005 06:54 pm
No estoy seguro, pero quizá sería

Código :

class Boton extends MovieClip{
...
}

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 17 Nov 2005 07:17 pm
El problema es que estas suponiendo que this referencia al objeto de la clase Boton, lo cual no es así, ya que this se refiere al MovieClip miBoton. Por eso no encuentra la función textoOver ni textoOut. Prueba a poner trace(this) en botonOver o botonOut, y podrás comprobarlo.

Por Gengis

27 de clabLevel



 

Córdoba(España)

firefox
Citar            
MensajeEscrito el 17 Nov 2005 07:33 pm
Muchas gracias por vuestras respuestas.

Gengis: Entonces como puedo acceder a la clase nuevamente, porque con this._parent me peta, con _parent me sale undefined...

Muchas gracias.

Por johanFX

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 17 Nov 2005 07:44 pm
Pues puedes usar la ruta completa( _root.loquesea.boton ), aunque esta solución no es muy buena, o puedes usar la solución que proponia zah:
No estoy seguro, pero quizá sería

Código :

Código:

class Boton extends MovieClip{
...
} 

Es decir, haces que tu clase herede de MovieClip, con lo que las propiedades y metodos pasan a ser accesibles desde la clase Boton. Tienes que tener en cuenta que no podrias poner directamente new Boton(), sino que tendrías que ir a opciones de vinculación y exportar para ActionScript, seleccionando el nombre de la clase.
Los objetos añadidos al escenario en tiempo de diseño automáticamente se registran en la clase, y para crear uno nuevo dinámicamente puedes usar

Código :

attachMovie( "Simbolo", "NombreNuevo", profundidad)


Espero haber sido de ayuda

^^ ruuuuuuuuuuuuuuuu

Por Gengis

27 de clabLevel



 

Córdoba(España)

firefox
Citar            
MensajeEscrito el 18 Nov 2005 03:58 am
Debes setear una variable de scope. algo asi

Código :

class Boton
{
   //Propiedades
   var boton_MC : MovieClip;
   var texto_OVER : String;
   var texto_OUT : String;
   var owner:Boton;
   //Constructor
   public function Boton (boton : MovieClip, over : String, out : String)
   {
      owner = this;
      boton_MC = boton;
      texto_OVER = over;
      texto_OUT = out;
      activaBoton ();
   }
   //Metodos
   private function activaBoton ()
   {
      boton_MC.owner = owner;
      boton_MC.onRollOver = botonOVER;
      boton_MC.onRollOut = botonOUT;
   }
   private function botonOVER ()
   {
      owner.textoOVER ();
   }
   private function botonOUT ()
   {
      owner.textoOUT ();
   }
   private function textoOVER ()
   {
      trace (texto_OVER);
   }
   private function textoOUT ()
   {
      trace (texto_OUT);
   }
}

Por Tmeister

260 de clabLevel

2 tutoriales

 

firefox

 

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