Declaracion de la plantilla de las balas (todas tienen los mismos apartados pero diferente comportamiento)
Atributos:
– Sprite bala; Sprite de la bala (habra mas si hay mas balas)
– Rectangle colision; Rectangulo de colision de la bala (habra mas si hay mas balas)
Constructores:
– Bala() Donde TIPO = {Simple, 2Diagonal, 2Trasera, 2EjeY} por ahora. Este constructor carga la imagen de la bala en su sprite y asigna las posiciones iniciales de la bala y de su rectangulo de colision.
Metodos:
– Update(int velocidad) Mueve n = velocidad pixels la bala
– Draw() Dibuja la bala en pantalla
Comportamientos:
Lo unico que variara en los distintos tipos de balas seran las posiciones iniciales y el comportamiento en update.
Simple -> Se carga en el extremo derecho de la nave, justo al medio de su altura. Su comportamiento sera rectilineo hacia la derecha.
2Diagonal -> 2 Balas que se cargan en el mismo sitio que la simple. Su comportamiento sera en diagonal 45º hacia delante, una hacia arriba y otra hacia abajo.
2Trasera -> 2 Balas que se cargan en la parte trasera de la nave, a 1/3 y 2/3 de la altura de la nave respectivamente. Su comportamiento es como la simple pero hacia la izquierda.
2EjeY -> 2 Balas que se cargan en el medio de la nave, en los extremos de arriba y abajo. Su comportamiento es rectilineo sobre el eje Y, una arriba y otra abajo.
Para usar la clase:
Lo logico es que no se quiera solo instanciar 1 bala, por eso explicare como instanciar un conjunto de balas.
Usaremos una lista de balas, mas concretamente de proyectiles. List balas = new List();
Para una prueba de todos los tipos de balas crearemos varios metodos que carguen varios tipos de balas, aqui un ejemplo de balasimple. void dispararBala(){ BalaSimple bala = new BalaSimple(); balas.Add(bala); }
El metodo lanzador de balas deberia estar ya hecho, sera un boton al ser pulsado, el cual llamara a dispararBala() y eso creara la instancia y la añadira a la lista.
Una vez añadidas las balas creamos la logica de movimiento en Update, en este ejemplo se mueven 8 pixels cada 1 segundo. if(gameTime.TotalGameTime.Seconds % 1 == 0) { for(int i = 0; i < balas.Count; i++) { if(balas[i].estoyVivo) balas[i].Update(8); else balas.Remove(balas[i]); } } Esto actualizaria la posicion de la bala si esta viva (sigue en la pantalla), en caso contrario se elimina de la lista y posteriormente el garbage collector de c# eliminaria la instancia de la bala ya que no se ha referenciado otra vez.
En el metodo Draw simplemente haremos un foreach de la lista para dibujar todas las balas. foreach(Proyectil bala in balas) bala.Draw();