Hola a todos!! Ya está aquí el puente y con él un poco de tiempo libre para teclear un poco de código, para este finde me he propuesto crear el sistema de disparos, colisiones y daño de mi pequeño juego, mi duda es en cómo aplicar la herencia, una de los conceptos que no he terminado de comprender -.-'Tengo pensado en hacer una clase "Colisionable" que tengan todos los objetos que deban recibir los disparos y que pase algo, algún sonido o efecto o algo, desde enemigos a objetos del escenario que se pueda destruir o no. Mi duda es cómo hacerlo porque no lo tengo del todo claro, sobre todo el tema de virtual o no sé si use el @override (de java), he estado buscando pero para aclarar dudas lo mejor es el foro.
public class Colisionable : MonoBehaviour {
public float vida;//O resistencia
public bool destruible;
//Otras variables que se me ocurran
public virtual void ImpactoBala(int damage){}
public virtual void Destruir(){}
//Otra función que se me ocurra y deban llevar todos
}
public class Enemigo : Colisionable {
//Vuelvo a declarar las variables vida y destruible?
public override void ImpactoBala (int damage)
{
//Código para éste caso
}
public override void Destruir ()
{
//Código para éste caso
}
public void FuncionSoloDeEnemigo () {}
}Ésta sería la clase genérica, las clases heredadas también heredarán de MonoBehaviour, no? Las clases heredadas pueden tener funciones que no tengan la clase padre, no? Cuando quiera llamar a la función ImpactoBala() puedo hacer referencia a la clase padre? (Sino no me serviría porque quiero hacer siempre un GetComponent<Colisionable>().ImpactoBala();)
[quote author=juanma_teso" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="34611" data-ipsquote-contentcommentid="124588">Cuando quiera llamar a la función ImpactoBala() puedo hacer referencia a la clase padre? (Sino no me serviría porque quiero hacer siempre un GetComponent<Colisionable>().ImpactoBala();)[/quote]Si, por tercera vez. Si la clase
Colisionable tiene la funcion
ImpactoBala() y la clase
Enemigo:Colisionable sobreescribe esa función, se ejecutará la función
ImpactoBala() del
Enemigo:Colisionable.
Recuerda que si en algún momento, desde la clase
Enemigo, quieres llamar la funcion
ImpactoBala() de la clase
Colisionable, puedes usar el puntero
base. El comando
base.ImpactoBala() ejecutaría la función del padre.
Título: Herencia
Publicado por: juanma_teso en Diciembre 05, 2015, 09:22:33 PM
El tema de herencia y polimorfismo si me dijeron que era potente, aunque hasta que no se necesita no se aprecia...