Comunidad de diseño web y desarrollo en internet online

Como crear un TextField desde una clase y que se vea en el Stage??

Citar            
MensajeEscrito el 20 Ago 2011 07:32 pm
Hola!,

La verdad es que me siento un poco tonto con esto, pero el cambio a AS3, me esta costando uno y la mitad del otro..

Estoy intentando crear un campo de texto desde una clase al Stage, pero no logro que se vea. Este es mi código:

Código ActionScript :

package  {
   
   import flash.display.Sprite;
   import flash.text.TextField;

   public class CrearMovie extends Sprite {
   public var elmovie:MovieClip;
   
      public function CrearMovie() {
         
         var elCampo:TextField = new TextField();
            elCampo.name = "elCampo";
            elCampo.border = true;
            elCampo.text = "hola crayola";
            elCampo.selectable = true;
            addChild(elCampo);
            trace(elCampo.parent); //Me regresa [object CrearMovie]
      }

   }
   
}
//


Agradecere mucho su ayuda!

Por cadaop

8 de clabLevel



 

safari
Citar            
MensajeEscrito el 20 Ago 2011 08:52 pm
Buenas ¡¡

Pues el código está bien, lo único que veo es que te falta el

import flash.display.MovieClip; del MovieClip que has creado.

Por Flasheroas3

22 de clabLevel



 

chrome
Citar            
MensajeEscrito el 20 Ago 2011 10:08 pm
Hola!, si me faltó ponerlo ahí.. pero aún así no sale nada en el escenario..

En cambio si lo hago en un frame.. sale inmediatamente.

Código ActionScript :

import flash.text.TextField;

var unCampo:TextField = new TextField();
   unCampo.x = 100;
   unCampo.y = 50;
   unCampo.autoSize = TextFieldAutoSize.LEFT;
   unCampo.text = "Este campo se crea desde el timeline";
   addChild(unCampo);


Me imagino que debo de alguna forma relacionar al escenario al usar el addChild.

En AS2, desde cualquier Clase podría hacerlo con un simple "_root.CreateTextField" y este mismo problema tengo al momento de crear un movie desde la clase.. si le hago trace() se que el movie existe, que esta creado e incluso en las coordenadas x o y que le haya dado. El problema es que no se ve.

help! :)

Por cadaop

8 de clabLevel



 

safari
Citar            
MensajeEscrito el 20 Ago 2011 10:17 pm
Pues que raro que no te salga, te debería salir ¡¡¡ está todo bien.

Lo mismo has puesto mal el nombre de la clase en el cuadro de texto ...otra cosa no se me ocurre.

Por Flasheroas3

22 de clabLevel



 

chrome
Citar            
MensajeEscrito el 21 Ago 2011 01:39 am
Hola cadaop,

El problema es que tú estás añadiendo (con addChild) el texto a la lista de visualización de tu CrearMovie. Tienes 2 maneras de solucionar esto:

1.Añadir tu CrearMovie al escenario. Para ello debes hacer lo siguiente en la película principal:

Código ActionScript :

var cm:CrearMovie = new CrearMovie();
this.addChild(cm);


2. Pasarle un argumento de tipo Stage a tu clase CrearMovie en el constructor y añadir tu clip a la lista de visualización de dicho Stage. Algo así:

Código ActionScript :

package  { 
    
   import flash.display.Sprite; 
   import flash.text.TextField; 
 
   public class CrearMovie extends Sprite { 
   public var elmovie:MovieClip; 
    
      public function CrearMovie(escenario:Stage) { 
          
         var elCampo:TextField = new TextField(); 
            elCampo.name = "elCampo"; 
            elCampo.border = true; 
            elCampo.text = "hola crayola"; 
            elCampo.selectable = true; 
            escenario.addChild(elCampo); 
            trace(elCampo.parent); // Te devolverá [object Stage] 
      } 
 
   } 
    
}

Y después, en tu película principal, escribirías:

Código ActionScript :

var cm:CrearMovie = new CrearMovie(this.stage);


No obstante, es mejor que utilices la primera opción. Es más correcta y clara.

Por nestorrente

1010 de clabLevel

10 tutoriales

 

Vigo

firefox
Citar            
MensajeEscrito el 21 Ago 2011 06:37 pm

nestorrente escribió:

Hola cadaop,

El problema es que tú estás añadiendo (con addChild) el texto a la lista de visualización de tu CrearMovie. Tienes 2 maneras de solucionar esto:



Hola nestorrente, no sabes cuanto llevo rompiendome la cabeza con esto. Normalmente en AS2 dentro de la Clase creaba la referencia con un var estaClase:miClase = this; y quedaba listo, pero lo intente hacer desde AS3 y nunca me salio nada en el Stage.

Probe con las dos formas que me dices y tienes razón, definitivamente la primera creo que seria la mas correcta. Muchas gracias!!

Para los que les interese, así quedo el código:

Código ActionScript :

//Desde el timeline
import CrearMovie;

var elMovie:CrearMovie = new CrearMovie();
   addChild(elMovie); //Aqui la solución, me faltaba agregar la clase al MainTimeline!! antes _root
//


Aqui el codigo de la clase de prueba:

Código ActionScript :


package  {
   
   import flash.display.Sprite;
   import flash.display.MovieClip;
   import flash.text.TextField;
   import flash.text.TextFieldAutoSize;

   
   public class CrearMovie extends Sprite {
   
   
      public function CrearMovie(obj:Object):void {
         // constructor code
         
         var elCampo:TextField = new TextField();
            elCampo.width = 100;
            elCampo.height = 22;
            elCampo.name = "elCampo";
            elCampo.border = true;
            elCampo.text = "hola crayola";
            elCampo.x = 50;
            elCampo.y = 10;
            elCampo.selectable = true;
            addChild(elCampo);
            //trace(elCampo.parent);
            
         var unMovie:MovieClip = new MovieClip();
            unMovie.x = 50;
            unMovie.y = 200;
            
            addChild(unMovie);
            
         var otroCampo:TextField = new TextField();
            otroCampo.autoSize = TextFieldAutoSize.LEFT;
            otroCampo.border = false;
            otroCampo.selectable = false;
            otroCampo.text = "Este campo esta creado dentro de un movieclip y tiene la funcion de autoSize habilitada";
            
            unMovie.addChild(otroCampo);
      }

   }
   
}
//

Por cadaop

8 de clabLevel



 

safari
Citar            
MensajeEscrito el 21 Ago 2011 07:05 pm
Por cierto, he notado que antes al declarar la clase podía poner un objeto y al momento de instanciarla no era necesario pasarle ningún parámetro. Ahora me sale un error, ya no es posible hacerlo?

Ejemplo AS2

Código ActionScript :


class miClase 
{
 public function miClase(elObjeto:Object)
{
   trace(elObjeto); 
}
}

/// Desde el timeline
var unaClase:miClase = new miClase(); //No era necesario pasarle ningun parametro.


AS3

Código ActionScript :

package  {
   
   import flash.display.Sprite;
   
   public class miClaseAS3 extends Sprite {
   
      public function miClaseAS3(objeto:Object):void {
         // constructor code
         
      }

   }
   
}

//Desde el Timeline
import miClaseAS3;

var unaClase:miClaseAs3 = new miClaseAs3(); //Regresa un error de que espera al menos un parametro.

//Si hago lo siguiente no provoca el error
//Le paso vacio el objeto y continua sin problemas.
var otraClase:miClaseAs3 = new miClaseAs3({});

//


Sera que ya no puede ir vacio?

Gracias!

Por cadaop

8 de clabLevel



 

safari
Citar            
MensajeEscrito el 21 Ago 2011 10:47 pm
No, ya no puede ir vacío. De hecho, no sabía que en AS2 sí que pudiera. Pero el hecho de que pueda ir vacío es un error, no debería poder hacerse.

De todos modos, puedes darle un valor por defecto. Por ejemplo:

Código ActionScript :

public function MiClaseAS3(opcional:int=3) {
    //...
}


Si no se le pasa nada, se tomará el valor 3 por defecto :D

Por nestorrente

1010 de clabLevel

10 tutoriales

 

Vigo

firefox
Citar            
MensajeEscrito el 24 Ago 2011 02:51 am
Muchas gracias por tu ayuda nestor

:)

Por cadaop

8 de clabLevel



 

safari

 

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