Comunidad de diseño web y desarrollo en internet online

Problema extraño con addChild()

Citar            
MensajeEscrito el 18 May 2008 03:26 pm
Hola,
estoy preparando una aplicación en la flash lee un archivo XML, crea una serie de tarjetas y las \"lanza\" dentro del escenario como una animación (como si repartiese cartasm, aunque el asunto no vaya por ahí).

El tema es que hasta ahora me ha funcionado muy bien, porque lo tenía todo programado dentro de la película principal, pero por temas de comodidad estoy intentando crear una clase externa.

Y ahí surge el problema ¿porqué una sentencia simple como addChild(), que siempre funcionó bien, falla ahora?, dando el mensaje:

1180: Call to a possibly undefined method addChild.

He probado a importar todas las librerías de flash (a lo bruto), pero ni con esas. Os dejo el código de mi clase externa:

Código :

package
{
   import flash.display.*
   import flash.errors.*
   import flash.events.*
   import flash.external.*
   import flash.filters.*
   import flash.geom.*
   import flash.media.*
   import flash.net.*
   import flash.profiler.*
   import flash.system.*
   import flash.text.*
   import flash.ui.*
   import flash.utils.*
   import flash.xml.*

   public class nonamaeAS   
   {
   
      public function lanzar (archivoXML:String):void
      {
         var cargador:URLLoader = new URLLoader();
         cargador.load(new URLRequest(archivoXML));
         cargador.addEventListener(Event.COMPLETE, mostrarTarjetas); //Cuando se acaba de cargar el XML, empieza la fiesta
      }
      
      public function mostrarTarjetas(e:Event):void {
         var proyectos:XML = new XML(e.target.data); //Cojemos los datos del archivo y los tratamos como XML
         
         for (var i:Number = 0; i < proyectos.tarjeta.length(); i++) {
            var tarjeta:MovieClip = new MovieClip();
            tarjeta.name = \\\"tarjeta\\\"+i;
            tarjeta.graphics.beginFill(0xFFFFFF);
            tarjeta.graphics.drawRoundRect(0, 0, proyectos.tarjeta[i].ancho.text(), proyectos.tarjeta[i].alto.text(),15,15);
            tarjeta.graphics.endFill();
            tarjeta.x = Math.ceil(Math.random()*640);
            tarjeta.y = 200;
            addChild(tarjeta); // EL ERROR LO DA ESTA LLAMADA, PERO SOLO, COMO EN ESTE CASO, CUANDO LA USO DESDE UNA CLASE EXTERNA
         }
      }
   
   }

}


Perdonad si quedó tan grande el código, no sé si se puede colorear en el foro.
Agradecería alguna sugerencia sobre qué debería hacer, porque llevo buscando en google ya un buen rato y no encuentro nada ¿a alguien más le ha pasado?

Gracias de antemano.

Por Skaaven

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 May 2008 03:51 pm
tendrías que mandar el objeto en el que se agregaran las cartas, por ejemplo, desde la aplicacion principal mandarle un this, lo recibes en tu clase y a ese es al que le haces el addChild()

Por master_of_puppetz

Claber

2483 de clabLevel

7 tutoriales
3 articulos

Genero:Masculino   Premio_Secretos

WebDev (Flex + PHP + JS)

firefox
Citar            
MensajeEscrito el 18 May 2008 06:06 pm
Muchas gracias por la respuesta.
Al final creo que por diversas razones me interesa más no sacar esta función como clase externa, porque me da unos cuantos dolores de cabeza, quizás por no haberlo diseñado desde el principio pensando en hacerlo como clase.

Bueno, lo dicho, gracias, y si tengo algún otro problema ya lo postearé.

Por Skaaven

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 May 2008 06:57 am
¿y si extiendes tu clase a partir de la clase MovieClip -o de cualquier Objeto displayable que tenga el método addChild?

Código :

public class nonamaeAS extends MovieClip{
 .....
}

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 May 2008 08:07 am
¿y si extiendes tu clase a partir de la clase MovieClip -o de cualquier Objeto displayable que tenga el método addChild?


Gracias por la respuesta.
Eso es algo que probé, y ya no me aparece el error. Sin embargo, tampoco me sacaba nada en pantalla. Desde el debug veo que no solo no lo saca en pantalla, sino que no me creaba los objetos.

Por ahora he puesto el código directamente en el escenario, porque quiero seguir avanzando sin quedarme atascado en esto, pero sigo muy interesado en poder sacar el código como clase externa, sobre todo porque nunca lo he hecho, y creo que ya es hora ¿no? :-)

Por Skaaven

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 May 2008 08:21 am
Por si a alguien le interesa, podeis ver una prueba de cómo va la cosa desde esta dirección:

http://www.nonamae.es/test

El planning es hacer un portafolio con mis trabajo de diseño , 3d e ilustración, así que habrá 3 botones, y cada uno lanzará las tarjetas correspondientes a cada apartado, como si fuesen fichas. Al hacer doble click sobre una tarjeta, se mostrarán más detalles cobre ese proyecto en concreto. Los datos de cada tarjeta (tamaño e imagen) están contenidos en ficheros xml, cosa que veo que el AS3 maneja de maravilla.

Ahora las tarjetas están blancas, pero ya está implementado que muestren una imagen, miniatura del proyecto al que representan.

Después de dos años sin tocar Flash, me encuentro con el cambio drástico del AS3. La verdad es que preparar esta web será un gran reto para un no-programador como yo, pero, qué narices, me lo estoy pasando de puta madre. Aprender siempre es divertido.

Se aceptan todo tipo de sugerencias y opiniones, aunque el estado del proyecto, como veis, está aun muy verde en su fase de ejecución. (joer, si hasta las tarjetas a veces tapan los botones, cosa que tengo que corregir en cuanto tenga tiempo y sepa cómo manejar bien los índices)

Por Skaaven

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 May 2008 03:59 pm
[quote=\"Skaaven\"]Eso es algo que probé, y ya no me aparece el error. Sin embargo, tampoco me sacaba nada en pantalla.[/quote]
Bueno, es que tu clase debería extender de MovieClip, tener una definición de clase, hacer un new y añadir la clase al stage...
Vamos

Código :

//en tu clase 
public class nonamaeAS extends MovieClip{
     function nonamaeAS(){
         //la verdad es que no hago nada
     }
     ...el resto....
}

Código :

//en tu película
var grupo:nonamaeAS=new nonamaesAS()
addChild(grupo)
grupo.lanzar(\\\"fichero.xml\\\")

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 May 2008 04:35 pm
Mmm, muy interesante esto que me cuentas.
Ahora estoy ya programando directamente en el Stage, par añadir características, pero en cuanto pueda probaré de nuevo a sacarlo como clase externa.

Me está gustando esto del AS3.

Muchas gracias.

Por Skaaven

3 de clabLevel



 

firefox

 

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