Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: 15689 en Julio 13, 2010, 01:37:50 AM

Título: que es un objeto parent
Publicado por: 15689 en Julio 13, 2010, 01:37:50 AM
bueno otra de mis pregunta curiosa, que es un objeto parent y de que manera puedo utilizarlo ???
Título: Re: que es un objeto parent
Publicado por: Herni en Julio 13, 2010, 02:16:04 AM
Cita de: 15689 en Julio 13, 2010, 01:37:50 AM
bueno otra de mis pregunta curiosa, que es un objeto parent y de que manera puedo utilizarlo ???

Es un objeto que puedes vincular a cualquier otro, de forma que el segundo coger? las propiedades del primero.

Con este ejemplo lo ver?s m?s claro:

* Imagina que eres un friki acojonante y quieres que tu juego tenga 300 tipos de monstruos
* Ahora a?ade que has puesto 200 tipos de armas cada una con su tipo de bala.

Hasta ah? el ejemplo, ahora imagina que para cada monstruo tienes que crear en sus eventos un total de 200 colisiones (una por cada tipo de bala), con eso tendr?as que crear la friolera de 300*200 = 60000 eventos de colisiones XD

Pues en lugar de hacer eso para cada monstruo (objMonstruo1, objMonstruo2, objMonstruo3... objMonstruo300) creas un objeto llamado ObjEnemigo en el que declaras los 200 tipos de colisiones, m?s todo lo que sea com?n a los enemigos, como por ejemplo qu? pasa si se caen por un agujero.

Luego a cada uno de tus monstruos les dices que tomen como objeto Parent el objEnemigo, ahora cada uno de tus monstruos tendr? inclu?dos en sus eventos todas las colisiones posibles.


Postdata: No seas tan friki, menos monstruos, menos armas... bahh es co?a :)


Un saludo,
- Herni
Título: Re: que es un objeto parent
Publicado por: Wadk en Julio 13, 2010, 02:53:23 AM
Sirven para muchas cosas m?s. En el ejemplo de Herni, tambi?n pod?s crear un objeto objBala y hacer que sea parent de todas las balas, y as? s?lo tendr?as que crear 1 evento de colisi?n.

Pero hay m?s que decir.
Por ejemplo, si ten?s un objeto A con evento create y un objeto B con evento step y lo hac?s hijo de el objeto A (es decir, hac?s al objeto A parent del B), va a ser como si el objeto B tuviera un evento create igual al del objeto A.
Pero si despu?s cre?s un evento create en el objeto B, el evento create del objeto A no se ejecutar? en el objeto B. Para que se ejecute, ten?s que usar la funcion event_inherited().
Si en el c?digo o en el GM te refer?s en alg?n momento a un objeto que es parent de uno o m?s objetos, los objetos hijos tambi?n se ver?n afectados.



Un ejemplo de algo interesante que se puede hacer con parents...
Supongamos que quer?s tener muchos enemigos en tu juego. Quer?s que cada uno se mueva de una forma distinta, tenga vida y ataque distintos, etc. Tambi?n quer?s que hayan otros objetos que da?en al jugador pero que no se consideren enemigos como pinchos, fuego, trampas, lo que sea.
Entonces, para los enemigos cre?s el objeto objEnemigo y en create pon?s:
Código (Create) [Seleccionar]
life=100;
damage=10;
speed=3;

Despu?s cre?s a un enemigo y le pon?s a objEnemigo como su parent. En step del enemigo hac?s que se mueva y eso. El enemigo por defecto va a tener los stats del objeto objEnemigo, es decir 100 de vida, 10 de ataque y 3 de velocidad. Si quer?s cambiar alguno, pod?s ponerle esto en el evento create:
Código (Create) [Seleccionar]
event_inherited(); //Para que primero se asignen los valores por defecto
life=200;

As? el enemigo va a quedar con 10 de ataque y 3 de velocidad pero con 200 de vida.
Haciendo eso termin?s a todos los enemigos. Despu?s en el objeto personaje agreg?s un evento de colisi?n con objEnemigo y pon?s algo as?:
Código (Colisi?n con objEnemigo) [Seleccionar]
life-=other.damage;
Y as?, cuando el personaje choque con un enemigo, sea cual sea, le bajar? la vida seg?n el ataque de dicho enemigo :).
Continuando, ahora con los obst?culos. Primero creamos un objeto objObstaculo y le ponemos en create:
Código (Create) [Seleccionar]
damage=10;
Despu?s creamos el objeto objPinchos y hacemos a objObstaculo su parent. Por defecto objPinchos tendr? una variable damage que vale 10.
Despu?s creamos el objeto objFuego. Supongamos que queremos que el fuego mate de un golpe al jugador... podemos poner lo siguiente en create:
Código (Create) [Seleccionar]
damage=-1;
Y despu?s indicaremos que un damage de -1 significa matar de un golpe.
Ahora en vez de agregar un nuevo evento de colisi?n al personaje, podemos crear un nuevo objeto objPeligro (se me est?n acabando los nombres buenos) y poner a objObstaculos y objEnemigos como hijos de objPeligro.
Despu?s cambiamos el evento de colision con objEnemigos por colision con objPeligro y as?, al chocar el personaje con un enemigo u obst?culo, perder? la cantidad de vida seg?n el da?o que hayamos indicado que el enemigo u obst?culo debe inflijir.
Tambi?n hay que editar el c?digo de colisi?n con objPeligro para que si el da?o es -1 el personaje muera instant?neamente:
Código (Colisi?n objPeligro) [Seleccionar]
if(other.damage<0){life=0;}else{life-=other.damage;}

Despu?s se pueden agregar muchas cosas m?s. Por ejemplo, si algunos enemigos disparan, se puede hacer que las balas tengan un parent objBala que a su vez sea parent de objPeligro, y que en objBala se declaren las propiedades por defecto de las balas y en cada objeto de bala estas se modifiquen...
Las posibilidades son infinitas :)



Bueno ya escrib? mucho, me voy.
Título: Re: que es un objeto parent
Publicado por: Gabriel Moreno en Julio 13, 2010, 02:56:17 AM
Cita de: Wadk en Julio 13, 2010, 02:53:23 AM
Sirven para muchas cosas m?s. En el ejemplo de Herni, tambi?n pod?s crear un objeto objBala y hacer que sea parent de todas las balas, y as? s?lo tendr?as que crear 1 evento de colisi?n.

Pero hay m?s que decir.
Por ejemplo, si ten?s un objeto A con evento create y un objeto B con evento step y lo hac?s hijo de el objeto A (es decir, hac?s al objeto A parent del B), va a ser como si el objeto B tuviera un evento create igual al del objeto A.
Pero si despu?s cre?s un evento create en el objeto B, el evento create del objeto A no se ejecutar? en el objeto B. Para que se ejecute, ten?s que usar la funcion event_inherited().
Si en el c?digo o en el GM te refer?s en alg?n momento a un objeto que es parent de uno o m?s objetos, los objetos hijos tambi?n se ver?n afectados.



Un ejemplo de algo interesante que se puede hacer con parents...
Supongamos que quer?s tener muchos enemigos en tu juego. Quer?s que cada uno se mueva de una forma distinta, tenga vida y ataque distintos, etc. Tambi?n quer?s que hayan otros objetos que da?en al jugador pero que no se consideren enemigos como pinchos, fuego, trampas, lo que sea.
Entonces, para los enemigos cre?s el objeto objEnemigo y en create pon?s:
Código (Create) [Seleccionar]
life=100;
damage=10;
speed=3;

Despu?s cre?s a un enemigo y le pon?s a objEnemigo como su parent. En step del enemigo hac?s que se mueva y eso. El enemigo por defecto va a tener los stats del objeto objEnemigo, es decir 100 de vida, 10 de ataque y 3 de velocidad. Si quer?s cambiar alguno, pod?s ponerle esto en el evento create:
Código (Create) [Seleccionar]
event_inherited(); //Para que primero se asignen los valores por defecto
life=200;

As? el enemigo va a quedar con 10 de ataque y 3 de velocidad pero con 200 de vida.
Haciendo eso termin?s a todos los enemigos. Despu?s en el objeto personaje agreg?s un evento de colisi?n con objEnemigo y pon?s algo as?:
Código (Colisi?n con objEnemigo) [Seleccionar]
life-=other.damage;
Y as?, cuando el personaje choque con un enemigo, sea cual sea, le bajar? la vida seg?n el ataque de dicho enemigo :).
Continuando, ahora con los obst?culos. Primero creamos un objeto objObstaculo y le ponemos en create:
Código (Create) [Seleccionar]
damage=10;
Despu?s creamos el objeto objPinchos y hacemos a objObstaculo su parent. Por defecto objPinchos tendr? una variable damage que vale 10.
Despu?s creamos el objeto objFuego. Supongamos que queremos que el fuego mate de un golpe al jugador... podemos poner lo siguiente en create:
Código (Create) [Seleccionar]
damage=-1;
Y despu?s indicaremos que un damage de -1 significa matar de un golpe.
Ahora en vez de agregar un nuevo evento de colisi?n al personaje, podemos crear un nuevo objeto objPeligro (se me est?n acabando los nombres buenos) y poner a objObstaculos y objEnemigos como hijos de objPeligro.
Despu?s cambiamos el evento de colision con objEnemigos por colision con objPeligro y as?, al chocar el personaje con un enemigo u obst?culo, perder? la cantidad de vida seg?n el da?o que hayamos indicado que el enemigo u obst?culo debe inflijir.
Tambi?n hay que editar el c?digo de colisi?n con objPeligro para que si el da?o es -1 el personaje muera instant?neamente:
Código (Colisi?n objPeligro) [Seleccionar]
if(other.damage<0){life=0;}else{life-=other.damage;}

Despu?s se pueden agregar muchas cosas m?s. Por ejemplo, si algunos enemigos disparan, se puede hacer que las balas tengan un parent objBala que a su vez sea parent de objPeligro, y que en objBala se declaren las propiedades por defecto de las balas y en cada objeto de bala estas se modifiquen...
Las posibilidades son infinitas :)



Bueno ya escrib? mucho, me voy.

Ja!! Si no hubieras escrito eso creeria que fue Copiar Y Pegar  :-[
Título: Re: que es un objeto parent
Publicado por: Herni en Julio 13, 2010, 03:04:39 AM
Me ha venido muy bien, no sab?a nada acerca de la funci?n event_inherited()

Aunque por el nombre dir?a que lo que hereda son los eventos.

?Qu? m?s cosas se pueden heredar desde un objeto Parent? ?Hay m?s funciones similares a la de event_inherited() o esta ya hace que el segundo objeto herede todo?


Gracias, un saludo,
- Herni
Título: Re: que es un objeto parent
Publicado por: Wadk en Julio 13, 2010, 03:31:11 AM
No copi? y pegu? nada XD.

event_inherited s?lo hereda el evento en el que es llamada (si la llam?s en create, ejecuta el c?digo create del parent, etc). No hay m?s funciones que conozca, pero no creo que sean necesarias.
No creo que se puedan heredar m?s cosas, pero tampoco lo veo muy necesario...
Título: Re: que es un objeto parent
Publicado por: Herni en Julio 13, 2010, 03:42:52 AM
Cita de: Wadk en Julio 13, 2010, 03:31:11 AM
No copi? y pegu? nada XD.

event_inherited s?lo hereda el evento en el que es llamada (si la llam?s en create, ejecuta el c?digo create del parent, etc). No hay m?s funciones que conozca, pero no creo que sean necesarias.
No creo que se puedan heredar m?s cosas, pero tampoco lo veo muy necesario...

No entiendo, si es como dices y event_inherited s?lo hereda el evento en el que es llamada (si la llamas en create, ejecuta el c?digo create del parent, etc.) ?no habr?a que hacer lo mismo en todas las colisiones para que heredase las instrucciones a hacer en cada colisi?n?


Gracias, otro saludo XD
- Herni
Título: Re: que es un objeto parent
Publicado por: 15689 en Julio 13, 2010, 06:32:30 AM
buau esto que si es reutil :)
muchas gracias Herni y Wadk  ;)
Título: Re: que es un objeto parent
Publicado por: NOKAUBURE en Julio 13, 2010, 12:25:04 PM
el parent lo uso mucho con bloques solidos y enemigos. Es realmente util. Te salva KB de memoria
Título: Re: que es un objeto parent
Publicado por: Herni en Julio 13, 2010, 02:00:05 PM
Cita de: NOKAUBURE en Julio 13, 2010, 12:25:04 PM
el parent lo uso mucho con bloques solidos y enemigos. Es realmente util. Te salva KB de memoria

?Para bloques de sonidos? Ilum?name please que no le hab?a visto esa posible utilidad, ?qu? cosas controlas desde el parent?

Y Wadk, si puedes, cont?stame lo del inherited XD


Gracias a todos, un saludo,
- Herni
Título: Re: que es un objeto parent
Publicado por: knd144 en Julio 13, 2010, 05:35:15 PM
Cita de: Herni en Julio 13, 2010, 03:42:52 AM
Cita de: Wadk en Julio 13, 2010, 03:31:11 AM
No copi? y pegu? nada XD.

event_inherited s?lo hereda el evento en el que es llamada (si la llam?s en create, ejecuta el c?digo create del parent, etc). No hay m?s funciones que conozca, pero no creo que sean necesarias.
No creo que se puedan heredar m?s cosas, pero tampoco lo veo muy necesario...

No entiendo, si es como dices y event_inherited s?lo hereda el evento en el que es llamada (si la llamas en create, ejecuta el c?digo create del parent, etc.) ?no habr?a que hacer lo mismo en todas las colisiones para que heredase las instrucciones a hacer en cada colisi?n?


Gracias, otro saludo XD
- Herni

No, mira, no hace falta llamarlo para todos los "hijos" u objetos que lo usan como Parent, solo que si el parent tiene alg?n c{odigo programado en create (por ejemplo) el obeto hijo de este al escribirle algo en create elimina autom?ticamente el c?digo del create del padre; lo que hace la funci?n es llamar al c?digo del padre p?ra luego agregarle el c?digo propio del hijo :p
Título: Re: que es un objeto parent
Publicado por: Herni en Julio 13, 2010, 08:41:02 PM
Cita de: knd144 en Julio 13, 2010, 05:35:15 PM
No, mira, no hace falta llamarlo para todos los "hijos" u objetos que lo usan como Parent, solo que si el parent tiene alg?n c{odigo programado en create (por ejemplo) el obeto hijo de este al escribirle algo en create elimina autom?ticamente el c?digo del create del padre; lo que hace la funci?n es llamar al c?digo del padre p?ra luego agregarle el c?digo propio del hijo :p

Ahhh... ahora est? claro y tiene toda la l?gica del mundo, s?lo me extra?aba por el hecho de llamarse event_inherited, lo asoci? con algo exclusivo de eventos.

Gracias por la aclaraci?n knd144 XD


Un saludo,
- Herni
Título: Re: que es un objeto parent
Publicado por: Wadk en Julio 14, 2010, 03:58:01 AM
Claro, si el hijo no tiene X evento, este se hereda autom?ticamente, sino, hay que heredarlo con event_inherited.

Y NOKAUBURE dijo "bloques solidos", no bloques de sonidos XD.
Título: Re: que es un objeto parent
Publicado por: Herni en Julio 14, 2010, 08:01:55 AM
Cita de: Wadk en Julio 14, 2010, 03:58:01 AM
Y NOKAUBURE dijo "bloques solidos", no bloques de sonidos XD.

Dios... necesito un smiley de esos que se da leches contra una pared.

Edito: Encontr? uno...  (http://www.gothic.org.au/forum/images/smilies/headWall.gif)

Ya me estaba imaginando un sistema v?a "Objeto Parent" de controlar m?ltiples vol?menes de los sonidos y cosas raras XD


Un saludo,
- Herni