Comunidad de diseño web y desarrollo en internet online

remover Child

Citar            
MensajeEscrito el 27 Abr 2011 02:57 am
Hola, bueno como ven sigo luchando con AS 3.0 (pero mejorando), bien
ahora mi problema es el siguiente. ya he logrado que mi personaje ande salte no se pase de los limites etc etc ahora también dispara esto lo hago llamando a un clase Shot con addChild,
bien aparece la "bala" le paso como parámetro la dirección y bárbaro todo bien, mi problema es
a la hora de eliminar dicha bala, quiero que esta se elimine desde su clase "Shot" cuando se de
X situación

asi pongo la bala en escena

Código ActionScript :

else if (key.isDown(Keyboard.CONTROL))
            { 
            newShot=new Shot(this.x,this.y,mirar)
            stage.addChild(newShot)
            }

y esta es la clase

Código ActionScript :


package scriptgame.motor{
   
   import flash.display.MovieClip;
   import flash.display.Stage;
   import flash.display.DisplayObject;
   import flash.events.Event;
   
   public class Shot extends MovieClip{

      public var Shot_speed:Number= 20
      public var Dire
      
      public function Shot(X , Y,Dir)
      {
      x= X
      y= Y
      Dire= Dir
            
         addEventListener(Event.ENTER_FRAME, avanza, false, 0, true);
      }
      
      public function avanza(evento:Event)
      {
              if   (Dire == 0)   this.x+=Shot_speed
         else if (Dire == 1)   this.x-=Shot_speed
         if (this.x > 200)destroy();
      }
      public function destroy():void
      {
      removeChild(DisplayObject(this))
      }
         
      
      }//END class
   }//End pack



public function destroy():void
{
removeChild(DisplayObject(this))
}

lo que se ve aquí es un intento por lograr el cometido evidentemente fallido.

Espero sus sabios consejos saluda att. Maxx

pd: Aquí dejo un link para verlo en acción a quienes quieran
http://maxiwork.comoj.com/flash_games/Game.swf

Por MaxiiSan20

Claber

168 de clabLevel



Genero:Masculino  

Montevideo

firefox
Citar            
MensajeEscrito el 27 Abr 2011 07:22 am
¿Has probado a añadirlo y eliminarlo al revés? O sea:

addChild(DisplayObject(newShot))

removeChild(this)

A mi así nunca me ha dado problema

Por juanfher

74 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 Abr 2011 07:33 am
Interesante sugerencia la pruebo y te comento a la brevedad

Por MaxiiSan20

Claber

168 de clabLevel



Genero:Masculino  

Montevideo

firefox
Citar            
MensajeEscrito el 27 Abr 2011 07:38 am
ArgumentError: Error #2025: El objeto DisplayObject proporcionado debe ser un elemento secundario del llamador.
at flash.display::DisplayObjectContainer/removeChild()
at scriptgame.motor::Shot/avanza()
:(

Por MaxiiSan20

Claber

168 de clabLevel



Genero:Masculino  

Montevideo

firefox
Citar            
MensajeEscrito el 27 Abr 2011 09:15 am
Cuando llamas el removeChild() asi, es porque quieres remover algo que se encuentra en dicho contexto. Como tu disparo se creo (y por ende, pertenece a) en el stage, pues lo logico es removerlo del stage:

Código ActionScript :

stage.removeChild(this);

Aunque no se porque lo has creado ahi... Quiza llamando al padre, tambien funcione:

Código ActionScript :

parent.removeChild(this);

Por Acreonte

Claber

1543 de clabLevel

5 tutoriales
6 articulos

Genero:Masculino  

Digital Scientist

firefox
Citar            
MensajeEscrito el 27 Abr 2011 10:03 am
Gracias Acreonte, como hago para que después que se remueve no me salga el error
TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.
?
otra cosa a que te refieres cuando decís
Aunque no se porque lo has creado ahí...

gracias nuevamente

Por MaxiiSan20

Claber

168 de clabLevel



Genero:Masculino  

Montevideo

firefox
Citar            
MensajeEscrito el 27 Abr 2011 10:10 am
otra preguntita de yapa es posible acceder a una variable desde la linea de tiempo u otra clase?

Por MaxiiSan20

Claber

168 de clabLevel



Genero:Masculino  

Montevideo

firefox
Citar            
MensajeEscrito el 27 Abr 2011 10:21 am
Me imagino que de alguna forma sigues haciendo referencia a dicho objeto. Prueba removiendo el listener:

Código ActionScript :

public function destroy():void
{
removeEventListener(Event.ENTER_FRAME, avanza);
parent.removeChild(this);
} 

Por cierto, personalmente no uso stage. Cuando agrego instancias de mis objetos, siempre lo hago en la clase principal y no en stage.

Por Acreonte

Claber

1543 de clabLevel

5 tutoriales
6 articulos

Genero:Masculino  

Digital Scientist

firefox
Citar            
MensajeEscrito el 28 Abr 2011 03:46 am
pero si mal no entiendo no es obligatoria añadir las instancias de MC en el stage?
no es así como se visualizan?

Por MaxiiSan20

Claber

168 de clabLevel



Genero:Masculino  

Montevideo

firefox
Citar            
MensajeEscrito el 28 Abr 2011 09:09 am
No, no es necesario hacer referencia al stage. No he usado mucho el stage, solo para cosas como saber el ancho y alto de la pelicula o para usar fullscreen. Que sucede si cargas tu pelicula en otra? quien es stage? creo que seria la pelicula madre y... uh! tendremos problemas...

Por Acreonte

Claber

1543 de clabLevel

5 tutoriales
6 articulos

Genero:Masculino  

Digital Scientist

firefox

 

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