Comunidad de diseño web y desarrollo en internet online

duda de novato en AS3

Citar            
MensajeEscrito el 17 Sep 2009 02:50 pm
Hola a todos,
tengo una duda de absoluto novato en AS3. Siempre he programado en AS 1 y 2 posteriormente pero no había dado el salto a AS 3, ahora finalmente lo he hecho y me ha surgido un problemilla que me imagino que le pasará a mas gente, he buscado info pero no consigo resolverlo, me explico:

Tengo un .fla con un clip de película en el escenario ("gamesprite") y su clase principal es coche (coche.as). En esa clase, creo nuevas instancias de otra segunda clase llamada vehiculo (en vehiculo.as) y cuando creo una nueva instancia de esta clase quiero incluirla dentro de gamesprite.

He probado con MovieClip(root).gamesprite.addChild, parent.addChild y Sprite(root)gamesprite.addChild por si acaso pero no consigo incluir estas instancias en dicho clip, alguien puede decirme como tengo que hacer?

Mil gracias de antemano.

Por torpedete

85 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 17 Sep 2009 03:11 pm
No sé si acierto a comprenderte. :(
Entiendo que la clase de documento es Coche, que desde ahí quieres crear objetos de la Clase vehículo y que los quieres añadir a un MC cuyo nombre de instancia es gamesprite.
Entonces no sería más que

Código ActionScript :

//en la Clase Coche, en algún momento
var vehiculo:Vehiculo=new Vehiculo();
gamesprite.addChild(vehiculo)

Vale, imagino que no es eso, que lo que tienes es un objeto de la Clase Coche (que llamas "gamesprite") y que quieres meter nuevos objetos de la clase Vehiculo ¿en el propio gamesprite? ¿en la película principal?

Código ActionScript :

//En la clase Coche, en algún momento
var vehiculo:Vehiculo=new Vehiculo();
addChild(vehiculo)  //<--lo añadiría al propio gamesprite
parent.addChild(vehiculo)  //<--lo añadiría a la película principal SIEMPRE que ya esté añadido el "gamesprite"

No sé, ando algo espeso :(

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 17 Sep 2009 03:21 pm
Gracias por la respuesta lo primero,

mi caso es el primero que comentas, y antes lo tenía hecho así y me chutaba perfectamente. El problema es que ahora necesito instanciar los objetos de Vehiculo dentro de un método de esta misma clase (necesito averiguar antes un dato para despues poder instanciarlo) y por eso ahora tengo que hacerle el addChild dentro de la clase Vehiculo.

Necesito instanciarlos dentro de la clase Vehiculo, ¿sabes como tendría que hacer? Si dentro de la clase Vehiculo hago un

Código :

addChild(this);

me da error
ArgumentError: Error #2024: No se puede agregar un objeto como elemento secundario de sí mismo.
at flash.display::DisplayObjectContainer/addChild()


y si hago un

Código :

parent.addChild(this);

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.



Espeso estoy yo, estoy haciéndome la picha un lio con esto en AS 3, tengo el juego practicamente acabado y me lio con un problema de ruta? (bueno, es de "concepto" de ruta pero es para fustigarme mas fuerte)

Por torpedete

85 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 17 Sep 2009 04:38 pm

torpedete escribió:

El problema es que ahora necesito instanciar los objetos de Vehiculo dentro de un método de esta misma clase (necesito averiguar antes un dato para despues poder instanciarlo)

la solución "más aproximada" (aunque errónea) es la que has puesto

Código ActionScript :

parent.addChild(this);

NO FUNCIONA, y no funciona porque "parent" NO existe hasta que no se ha añadido. (el problema es que necesitamos saber el parent para añadirlo)

La solución pasa por tener en una variable el "stage". Esa variable la haremos disponible en el constructor.
Vamos

Código ActionScript :

public Class Vehiculo extends MovieClip{
  var _parent:MovieClip;   //<--declaro una variable _parent
  ....el resto de variables....
  public function Vehiculo(mc){
       this._parent=mc;
       ....todo lo demás....
  }
  //Así, en alguna función podemos usar la "variable" _parent
  public function anadirVehiculo(){
     //usamos la variable _parent
     _parent.addChild(this)
  }
}

A la hora de crear un nuevo vehículo escribiríamos

Código ActionScript :

var vehiculo:Vehiculo=new Vehiculo(this)


Creo que funcionará, sino podemos probar como opciones,
1.-Hacemos _parent pública y en la película principal escribimos

Código ActionScript :

var vehiculo:Vehiculo=new Vehiculo()
vehiculo._parent=this

2.-Cambiar el planteamiento con algún dispatchEvent o algo por el estilo

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Sep 2009 07:30 am
Joer, pues no consigo hacerlo...

en la clase coche instancio así

Código ActionScript :

var miVehiculo0:vehiculo = new vehiculo(this,"horizontal", 0);


y en la clase vehiculo tengo esto

Código ActionScript :

   public class vehiculo extends MovieClip {
      var _parent:MovieClip;
                //mas definiciones



         public function vehiculo(mc:MovieClip,tipoMovimiento:String, posicionEnArray:int):void {
         this._parent=gamesprite;
                        //resto de acciones del constructor

                        _parent.addChild(this); 


No consigo hacerlo, y es que me toca las narices por que es el primer proyecto que hago en AS 3, y tengo todo "acabado" y al final se me ha atragantado esto que teóricamente es una chorrada... muchas gracias por la ayuda que me estás prestando y si se te ocurre que puede estar fallando me comentas a ver... que me tiene frito esto!

Por torpedete

85 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 18 Sep 2009 08:21 am
es

this._parent=mc //<--es "mc", que es el nombre de la variable que tienes en el argumento de la función
//public function vehiculo(mc:MovieClip,...

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Sep 2009 08:45 am
joder, cierto, toda la razón tienes.

Ahí estaba el fallo, ahora me hace el addChild como yo deseaba, no se que he tocado que me lo hace donde no debe pero eso ya es otro problema que ahora miraré, este que era el que no sabía como solventar ya está solucionado.

Mil gracias por tu ayuda, en serio ^^

Por torpedete

85 de clabLevel



Genero:Masculino  

firefox

 

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