Comunidad de diseño web y desarrollo en internet online

newbe en clases =)

Citar            
MensajeEscrito el 03 Nov 2008 07:01 pm
buenas
un amigo me indujo a empezar a aprender as3 en vez de seguir siempre con as2
y le hice caso ..lo primero son las clases
tengo una duda con el constructor:en el tutorial de aca dice..se puede dejar vacio ....y que sirve para ser instanciado en el fla..
pero para que no dejarlo vacio?
osea si le pongo algo adentro funcionaria como una funcion cualquiera?
bueno y la segunda pregutna es esta(cortita): this.addChild no funciona en la clase
o almenos como traté de hacerla funcionar
concretamente pongo un ejemplo
EJEMPLO SIN LA CLASE

Código ActionScript :

import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.utils.getDefinitionByName;
var contenedor:Sprite=new Sprite();
var tituloclass:Class = getDefinitionByName("titulo") as Class;
var tituloinstance:Object = new tituloclass();
contenedor.addChild(DisplayObject(tituloinstance));
contenedor.getChildAt(1).x= 250;
contenedor.getChildAt(1).y= 50;

eso me pondria un mc que tengo en la biblioteca en esas coordenadas dentro del sprite contenedor
ahora usando una clase en la que pongo eso no funciona
EJEMPLO CON LA CLASE

Código ActionScript :

package clases{
   import flash.display.DisplayObject;
   import flash.display.Sprite;
   import flash.utils.getDefinitionByName;
   public class Prueba extends Sprite {
      var contenedor:Sprite=new Sprite();
      this.addChild
      public function Prueba(){
         var tituloclass:Class = getDefinitionByName("titulo") as Class;
         var tituloinstance:Object = new tituloclass();
         contenedor.addChild(DisplayObject(tituloinstance));
         contenedor.getChildAt(0).x= 250;
         contenedor.getChildAt(0).y= 50;
      }
   }
}

y en el fla

Código ActionScript :

import clases.Prueba;
var lalala:Prueba = new Prueba();


eso me tira un error en la linea 7 del as

Código :

this.addChild(contenedor);
1042: The this keyword can not be used in static methods. It can only be used in instance methods, function closures, and global code.

que la verdad no entiendo
probe poniendo el this.addChild en la funcion y me daba otro error y en el fla..ni hablar
si alguien sabe de esto y me lo puede explicar
perfectirijillo ^^

Por ironeric23

Claber

407 de clabLevel



Genero:Femenino  

mozilla
Citar            
MensajeEscrito el 03 Nov 2008 07:46 pm
Hola como estas?? buena decisión la que tuviste de dejar el as2 jajaj. el as3 es otra cosa y esperemos que siga mejorando..

mira, el constructor es ,por explicarlo fácil , el método que se ejecuta cuando creas una clase.

por ejemplo al hacer un sprite vos haces..

Código ActionScript :

var sprite:Sprite= new Sprite();


el Sprite(), es el metodo de contruccion, podes pasarle o no parametros dependiendo de la clase..
ahora te dejo el link de un tip que hice una ves para simplificar y acortar tiempos extendiendo clases.

Sprites

Espero que te sirva para entender como pasar parámetros por un constructor y como usar addChild dentro de una clase. :)

Por phoxer

Claber

827 de clabLevel

4 tutoriales

Genero:Masculino  

Ing en Sistemas

firefox
Citar            
MensajeEscrito el 03 Nov 2008 07:46 pm
A ver... varias cosas:
Cuando exportas un mc para actionscript, éste ya se convierte en una clase (de hecho, si lo has llamado titulo puedes tener un archivo titulo.as en el que definas una clase con sus propiedades y métodos, y ya puestos, mejor empezar por letra mayúscula en todas partes, Titulo), por lo que puedes hacer:

Código ActionScript :

var tituloInstance:Titulo = new Titulo ();
contenedor.addChild (tituloInstance);


En lugar de:

Código ActionScript :

 var tituloclass:Class = getDefinitionByName("titulo") as Class; 
         var tituloinstance:Object = new tituloclass(); 
contenedor.addChild(DisplayObject(tituloinstance)); 


Igualmente puedes usar las variables que creas (titiloInstance) para referirte a esos clips, sin necesidad de usar getChildAt.
El error te sale por
a) Tal como te dice, no puedes aplicar funciones en el cuerpo de las clases, solo dentro de los métodos de ella que defines (como por ejemplo, el constructor).

b)La sintaxis de addChild es

Código ActionScript :

elClipEnElQueQuieresInsertarAlgo.addChild(LoQueQuieresInsertar);


En cuanto a lo que preguntabas, lo más fácil es que sea en la propia clase Titulo donde le mandes posicinarse:

Código ActionScript :

package clases{ 
    import flash.display.Sprite
   public class Titulo extends Sprite { 
      public function Titulo(){ 
         this.x = 50;
         this.y = 250;
      } 
   } 
} 


Antes, el clip Titulo lo has vinculado a la clase clases.Titulo.

En el fla (o donde sea en otra clase, como por ejemplo la que correspondería a Contenedor):

Código ActionScript :

import clases.Titulo;
var titulo:Titulo = new Titulo ()
this.addChild (titulo);

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores



Ultima edición por Zah el 03 Nov 2008 11:26 pm, editado 1 vez

Zaragoza, España

firefox
Citar            
MensajeEscrito el 03 Nov 2008 07:49 pm
hola!!

El constructor de una clase , como el nombre lo dice, es para crear una clase, no es una funcion cualquiera. Si por ejemplo, al crear una nueva clase quieres que se ejecuten ciertas acciones o deseas agregar valores a la clase cuando se cree, lo haces por el constructor. Cuando haces obj:Objeto = new Objeto() en ese momento es llamado el constructor, si lo vuelves a llamar despues, lo que haras sera que el objeto se vuelva a crear desde 0.

Con respecto a lo otro, lo correcto seria asi:

ironeric23 escribió:


Código ActionScript :

package clases{
   import flash.display.DisplayObject;
   import flash.display.Sprite;
   import flash.utils.getDefinitionByName;
   public class Prueba extends Sprite {
      private var contenedor:Sprite;
      public function Prueba() {
         contenedor=new Sprite();
         var tituloclass:Class=getDefinitionByName("titulo")  as  Class;
         var tituloinstance:Object=new tituloclass  ;
         contenedor.addChild(DisplayObject(tituloinstance));
         contenedor.getChildAt(0).x=250;
         contenedor.getChildAt(0).y=50;
      }
   }
}



No puedes agregar var contenedor = new Sprite de una vez porque ahi solamente estas declarando variables.

Salutss.

Por Lunaty

Claber

118 de clabLevel



Genero:Femenino  

Flash Developer & RM Email Support for Google

firefox
Citar            
MensajeEscrito el 03 Nov 2008 08:18 pm
wwow no querian responderme un poco mas lento?
jajajaja
la verdad agradecido
voy a checkear detenidamente lo que me dicen los tres y despues les cuento
pero desde ya gracias por la rapidez

up the irons!

Por ironeric23

Claber

407 de clabLevel



Genero:Femenino  

mozilla
Citar            
MensajeEscrito el 03 Nov 2008 09:54 pm
bueno..respondo en orden a lo que me fue mas facil de entender
@Lunaty
entendido
entonces dentro de una clase pero fuera de una funcion solo se pueden agregar
las variables que se usan despues en las funciones
gracias :D

Lunaty escribió:

Objeto() en ese momento es llamado el constructor, si lo vuelves a llamar despues, lo que haras sera que el objeto se vuelva a crear desde 0.

a ok..a lo que te refieres es por ejemplo que hay ciertos eventos en otras funciones pero si despues instancias otravez la clase con otra variable estaria la clase igual a como esta al principio sin cambios que pueden aver hecho los eventos ..estoy bien?

@Zah -->

Zah escribió:

Cuando exportas un mc para actionscript, éste ya se convierte en una clase

eso simplifica un monton de cosas
la manera en el que llamaba el titulo de la biblioteca la habia sacado del tutorial de freddie . Tal vez necesite un arreglo ese tutorial ? :? o almenos una aclaración nusep

Zah escribió:

Igualmente puedes usar las variables que creas (titiloInstance) para referirte a esos clips, sin necesidad de usar getChildAt.

perfecto entonces quedaria algo asi

Código ActionScript :

var contenedor:Sprite=new Sprite();
this.addChild(contenedor);
var tituloInstance:Titulo = new Titulo ();
tituloInstance.x=250;
tituloInstance.y=50;
contenedor.addChild(tituloInstance); 


Zah escribió:

En cuanto a lo que preguntabas, lo más fácil es que sea en la propia clase Titulo donde le mandes posicinarse:


entonces con eso lograria poner unas propriedades en el as y se agregarian al movieClip
eso esta buenisimo
siguiendo con eso..se puede asignarle a mas de un movieclip la msma clase?

ok solo me queda la respuesta de @phoxer

phoxer escribió:

buena decisión la que tuviste de dejar el as2 jajaj

fue una corazonada jaja

con respecto al tip tuyo una vez habia puesto comentarios pero ahora veo que estaba mas perdido que caperucita roja :P(caperucita estaba perdida? :? =no me acuerdo pero qda cool decirlo asi)
segun esa clase usaria un sprite por cada mc no?
lo que no entendi fueron solo dos cosas
super(); = la ayuda de flash no me aporto nda :S
no .. era solo una duda :P
bueno listo jaj
gracias por las viejas respuestas y las nuevas :D que todavia noestan :P
bueno
beso

Por ironeric23

Claber

407 de clabLevel



Genero:Femenino  

mozilla
Citar            
MensajeEscrito el 12 Nov 2008 11:08 am
ui no hubo mas respuestas :P

Por ironeric23

Claber

407 de clabLevel



Genero:Femenino  

mozilla
Citar            
MensajeEscrito el 14 Nov 2008 05:07 pm
Oh, a ver... a varios movieclips les puedes asignar la misma clase base, que a su vez debería extender a movieclip (la clase base la indicas en el recuadro debajo del nombre de la clase, en la biblioteca).

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 14 Nov 2008 05:20 pm
a ok
eso era lo que msa necesitaba saber
gracias
beso

Por ironeric23

Claber

407 de clabLevel



Genero:Femenino  

mozilla
Citar            
MensajeEscrito el 12 May 2009 12:30 pm
Todo muy bien explicado. Sólo me surge una duda.

Tengo una clase, A, al hacer un bucle for y cargar 10 objectos, después sólo puedo llamarlo con DisplayObject y no me permite acceder a las funciones que he definido dentro de la clase.

Clase elemento (exteds MovieClip)

Código :

for(var i = 0; i <= total-1; i++) {
 /* Proporciono ruta a través de xml de la imagen */
   _img = new elemento(datosXML.elements().imagen[i].@ruta,i);
   _img.posc = datosXML.elements().imagen[i].@posicion;
   _img.desc = datosXML.elements().imagen[i].@descripcion;
   _img.name = "foto"+i;
   _img.addEventListener(Eventos.ADDED_IMG,determinarPosicion);
   addChild(_img);
}

Para recuperar el control sobre esos movieclips

Código :

for(var i = 0; i<= total-1; i++) {
   var target:DisplayObject = this.getChildByName("foto"+i);
   if(lastTarget != null) {
      target.x = lastTarget.width * i;
   } else {
      target.x = 0;
   }
   target.initMovimiento();
   lastTarget = target;
}


Dos consideraciones:

    1. Este código está dentro de una clase que es la que pongo como predefinida para la película.
    2. lastTarget, es una variable DisplayObject que defino de forma global en la clase para indicar cuál es el último movieclip.



Pero al llamar a target.initMovimiento(); da un error, la función no existe.

Código :

1061: Llamada a un método initMovimiento posiblemente no definido mediante una referencia con tipo estático flash.display:DisplayObject.



Un saludo,

Por Willfrom

10 de clabLevel



 

Barcelona

firefox

 

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