Como funciona la herencia de objetos
Hemos visto que es un objeto y sus propiedades principales. Ahora vamos a mirar en detalle una propiedad muy importante, la propiedad Parent. Esta propiedad indica si el objeto que estamos tratando hereda todas las características de otro objeto. Veamos para que nos puede servir eso.
Como crear herencia entre objetos
Primero de todo, para decir que un objeto hereda de otro se hace pulsando en el botón Parent. Nos aparecerá una lista de todos los objetos disponibles en nuestro proyecto.
En el ejemplo de la imagen, este objeto es justo lo contrario: es un objeto padre y tiene varios hijos que heredan de él. Lo podemos saber porque hay una lista de ojbetos en el apartado Children. No hace falta decir que un objeto no puede heredarse a si mismo, si elegimos el mismo objeto (en la imagen sería elegir obj_WallPost, Game Maker nos avisará con un error.
Ahora veremos como aprovechar la herencia.
Herencia para eventos de colisión
Imaginemos que tienes un objeto jugador
, que puede recoger monedas que su valor es de 50, 100 y 250 puntos. Tendríamos que crear 3 objetos para cada moneda, y crear tres eventos de colisión para detectar las diferencias. Algo parecido a esto:
Podríamos crear un objeto padre, que cada moneda heredase de él y solo hacer el evento de colisión con el objeto padre. Quedaría así:
Mucho más simplificado, ¿verdad? Otro ejemplo: imaginemos que tenemos 5 enemigos diferentes, cada uno con un comportamiento o movimiento diferente, pero si, cualquiera de ellos, toca al protagonista, muere. ¿Es necesario crear 5 eventos de colisión? El ejemplo sería el mismo que el anterior.
Otro ejemplo de herencia: nada de código en los objetos hijos
Imaginemos que tenemos 10 objetos diferentes, pero todos se mueven igual. Eso implica que son 10 sprites diferentes. Por ejemplo, podría ser una bala, una flecha, un misil, etc… Podríamos tener un objeto padre con todos los eventos y acciones necesarios, y crear cada hijo dónde solo le pondremos un sprite y le diremos cuál es el objeto que hereda. ¿Ningún evento en el objeto? Si vemos alguno así, no significa que no haga nada, sino que ejecutará los del padre. Por eso es útil el botón Parent, para abrir directamente ese objeto y ver que hace.
Mezclar comportamientos: sobreescritura en eventos
Igual que es posible no tener eventos, es posible tener los mismos eventos con acciones diferentes para los objetos padres y para los objetos hijos. En programación se le llama sobreescritura. Por ejemplo, imaginemos que tenemos dos objetos monstruos
, que actúan igual, solo que uno se mueve de izquierda a derecha y el otro de arriba a abajo. Podemos tener un objeto padre que diga que todos se mueven de una manera, por si algún día creamos otro monstruo. El monstruo que se mueve igual que el padre, no le añadimos nada, pero el monstruo que se mueve diferente, seguro que tendremos que modificar el mismo evento. De esta manera, sobreescribimos el evento para que haga algo totalmente distinto (o en este caso parecido).
Aprovechar los eventos del padre
Pero también es posible aprovechar las acciones del padre y añadir las nuestras, sin sobrescribir totalmente el evento. Por ejemplo, imaginemos que tenemos un objeto padre, que cuando se crea, evento Create, tiene una serie de características: daño, vida y armas. Ahora creamos un objeto hijo, donde la única diferencia es que tendrá más vida. Si sobrescribimos su evento Create, al poner solo más vida perderíamos el daño y las armas. Game Maker Studio tiene una acción especial para cuando sobrescribimos el evento, para poder llamar antes al evento del padre, y luego modificar la vida para ese objeto en particular.
Una cosa importante cuando tratamos estos objetos: a veces con el objeto hijo no vemos algunos eventos que ya están creados en el padre. Al crear un evento nuevo de un objeto que tiene herencia, hay que fijarse siempre si el padre hace lo que nos interesa, no sea que “perdamos” en la sobre escritura cosas que puedan dar error.
Como hemos visto, usar un objeto padre o un objeto hijo puede implicar a varios objetos o instancias. Tener un evento de colisión con el objeto padre afectará a todos los hijos.
Múltiple herencia
Como os podéis imaginar, es posible heredar varias veces un objeto. Un objeto padre puede tener otro objeto padre, y así infinidad de veces. Por ejemplo, podemos tener un objeto obj_enemy
, un objeto obj_monster que hereda del anterior y luego objetos del tipo obj_monster1
, obj_monster2
… que heredan de obj_monster
.
Podemos crear también el tamaño de jerarquía que queramos. Es posible que obj_enemy y obj_monster nunca los pongamos como instancias en una room, ya que solo lo utilizamos para simplificar nuestro código. Igualmente, podemos crear otro objeto obj_enemy1 que herede de obj_enemy, independientemente de los objetos monstruos.
Lo que no es posible son las herencias cíclicas. Nos dará un error si un objeto obj_child
hereda de un obj_parent
, y este obj_parent
hereda también de obj_child
.
Conclusión
Hemos visto una de las características más potentes de Game Maker Studio, que nos permitirá ahorrar mucho tiempo y trabajo. Para dominar la herencia de objetos hay que dedicar algo de tiempo, y tener muy claro cómo estructurar tus objetos, pero veréis como se os recompensa a largo plazo.
Dice nomas que se puede usar parent pero no dice como ;-;
No entiendo exactamente la duda. ¿Te refieres a como relacionar un objeto padre con un objeto hijo?
Supongo que si ,me pasa lo mismo,explicas que se puede hacer pero no dices como relacionar al padre con el hijo .
He actualizado el contenido con el apartado Como crear herencia entre objetos, para que quede más claro.