Comunidad de diseño web y desarrollo en internet online

[AS3] Hacer que varias torretas disparen a la vez.

Citar            
MensajeEscrito el 17 Mar 2011 08:28 pm
Tengo un juego en el que pongo varias torretas en el stage, y cuando apreto un boton deberian disparar, pero cuando pongo varias torretas solo una dispara y las otras no hacen nada.

Como puedo hacer para que todas disparen, que todas agan la funcion de la torreta.

Por Aethernum

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Mar 2011 01:43 am
La clase torreta debería tener un método disparar, luego metes todas las torretas en un array y llamas el método disparar sobre cada uno de los elementos del array

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 18 Mar 2011 05:55 pm
Ya entendi lo que tengo que hacer solisarg, el problema es que me sale stackoverflow si ago el array dentro de la torreta, donde tendria que hacer que las torretas fueran un array, en el main?

Por Aethernum

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Mar 2011 06:02 pm
Los managers nunca están dentro de los miembros, sino fuera, tienen un listado (de enemigos, de torretas, de aviones, de lo que sea) y usualmente son una instancia única. ¿StackOverflow? Ahí debe hacer un loop desmadrado

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 18 Mar 2011 06:20 pm
Jorge no entendi muy bien, pero mira voy a poner el codigo que tengo y ahi me dices donde deberia ir.

Clase Main:

Código ActionScript :

package 
{
   import flash.display.MovieClip;
   
   /**
    * ...
    * @author nico
    */
   public class Main extends MovieClip 
   {
      public function Main()
      {
         init();
      }
      
      public function init()
      {
         
      }
   }
}


Clase Torreta:

Código ActionScript :

package 
{
   import flash.display.MovieClip;
   import flash.events.Event;
   
   /**
    * ...
    * @author nico
    */
   public class GreenTurret extends MovieClip 
   {
      public var greenBulletArray:Array;
      public var greenBullet:GreenBullet;
      
      public function GreenTurret()
      {
         init();
      }
      
      public function init()
      {
         addEventListener(Event.ENTER_FRAME, eFrame);   
      }
      
      public function eFrame(e:Event):void
      {
            shootBullets();
      }
      
      public function shootBullets():void
      {
         greenBulletArray = new Array();
         greenBullet = new GreenBullet();
         greenBulletArray.push(greenBullet);
         
         for each (var greenBullet in greenBulletArray)
         {
            if (Green.canShootGreen == true)
            {
               addChild(greenBullet);
               Green.canShootGreen = false;
            }
         }
      }
   }   
}


Gracias.

Por Aethernum

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Mar 2011 06:43 pm
Es una clase nueva, llamada TurretManager, tienes un array de instancias de GreenTurret, para poder recorrerlo, usualmente es un Singleton. No tengo nada a mano, porque ahora estoy trabajando en otro lenguaje, pero justo estoy haciendo un Manager muy simplitio de entender (es C#, pero vale el concepto)

Código :

public class BotManager : MonoBehaviour {

    private static BotManager instance = null;
   
   private List<Bot> bots = new List<Bot>();    
   
    public static BotManager Instance { 
        get {
            if (instance == null)
            {
                //Debug.Log("instantiate");
                GameObject go = new GameObject();
                instance = go.AddComponent<BotManager>();
                go.name = "BotManager";
            }

            return instance; 
        } 
    }
   public void RegisterBot( Bot bot)
   {
         bots.Add(bot);
   }
   public void ChangeTarget(GameObject go)
   {
      Transform t = go.transform;
      foreach (Bot bot in bots)
      {
         bot.ChangeTarget(t);
      }
   }
}


Aquí llego un listado de los Bots, y tengo un método channgeTarge4t que uso para que todos los Bots cambien de target al mismo tiempo. El get del contructor es porque es un Singleton (como todos los managers)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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