Comunidad de diseño web y desarrollo en internet online

problema AS3 con Box2D

Citar            
MensajeEscrito el 27 Sep 2010 05:34 pm
Hola a todos,
estoy haciendo mi primer juego con Box2D y recientemente he dado el salto a AS3 (muchos años con AS2 me han hecho mucho daño...), el caso es que me encuentro con problema que es mas de AS3 que de Box2D pero si alguno ha trabajado con Box2D lo entenderá mejor, me explico

tengo mi clase de documento "main" que extiende MovieClip
tengo una clase que es Bloque, que creo pasándole un Sprite y un b2Body

bien, en main, tengo una método de clase (static function, vamos) tal que este:


Código ActionScript :

public static function tiempoFinalizado():void {
   for (var i:int = arraySprites.length-1; i >= 0; i--) {
      if (arraySprites[i] is Bloque) {
         arraySprites[i].borraSprite();
         arraySprites[i].borraBody();
         //removeChild(arraySprites[i]);               
      }
   }
}


los métodos borraSprite() y borraBody() son del la clase Bloque y funcionan perfectamente, elimino los listeners del sprite, borro el sprite y destruyo el body, todo perfecto.

El problema es que dentro de esta function no me deja hacer un removeChild para cargarme la instancia de Bloque, es decir, habría borrado su contenido (Sprite, b2Body) pero quedaría la instancia vacía en el escenario, lo cual no es buena idea... (lo tengo comentado para que no me salte el mensaje de error que da,

Código ActionScript :

1180: Call to a possibly undefined method removeChild


Igual es algo básico, pero como aún estoy relativamente empezando en AS3 y nunca me había ocurrido esto pues no se por donde salir... ¿alguien puede echarme un cable? ¿Como puedo hacer un removeChild() en esa static function para eliminar por completo todo rastro del Bloque?

Gracias por adelantado y espero que se entienda el problema :oops:

Por torpedete

85 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 27 Sep 2010 06:35 pm
Para hacer operaciones en el DisplayList, necesitas una instancia que se encuentre en ella, en otras palabras el scope de un método estático no es el DisplayList, entonces falla

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 27 Sep 2010 06:52 pm
Gracias por tu respuesta solisarg!

Ok, entonces lo único que puedo hacer con lo que yo se, es que ese método static no sea static, si no hacer un método normal para poder utilizar el removeChild.

El problema que tendré ahora es que el método tiempoFinalizado() lo llamo desde otro método que salta con un listener en otra clase:

Código ActionScript :

public class marcadorTiempo extends Sprite{
      static var miTimer:Timer;
      static var tiempoRestante:Number;
      public function marcadorTiempo(tiempo:uint, posX:Number, posY:Number) {
                   //CÓDIGO DE LA CLASE PARA OTRAS COSAS...      
         miTimer = new Timer(1000, tiempoRestante);
         miTimer.addEventListener(TimerEvent.TIMER_COMPLETE, tiempoFinalizado);
         miTimer.start();         
      }
      
      private function tiempoFinalizado(e:TimerEvent):void{
         main.tiempoFinalizado();         
      }
         
   }


¿Cómo puedo hacer ahora para llamar al metodo de main tiempoFinalizado() desde el método del mismo nombre de marcadorTiempo? (hay una instancia de marcadorTiempo en main, por supuesto).

Por torpedete

85 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 27 Sep 2010 07:21 pm
Para no crear dependencias rígidas entre tus clases, considera generar un evento desde la clase marcadorTiempo a la que la clase main se subscriba en un listener

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 27 Sep 2010 07:32 pm
Ok, sabía yo que algún día me llegaría el momento de crear mis custom events :D

Gracias solisarg, muchas gracias.

Por torpedete

85 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 27 Sep 2010 07:58 pm
Perfecto! Todo ok, joder, si era todo mucho mas fácil así :D

Una vez mas, muchas gracias tocayo ;)

Por torpedete

85 de clabLevel



Genero:Masculino  

firefox

 

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