Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Maxy en Noviembre 01, 2015, 03:49:03 AM

Título: Como hacer que un objeto cambie de un sprite a otro y luego vuelva
Publicado por: Maxy en Noviembre 01, 2015, 03:49:03 AM
Veran, tengo un objeto y sprite Que son ''Puerta cerrada'' y ''Puerta abierta''
Quiero que cuando mi jugador se acerque a la puerta cerrada se abra la puerta y cuando me aleje se cierre por si sola...
Si pueden ayudarme se los agradeceria mucho  :-[  :)
Título: Re:Como hacer que un objeto cambie de un sprite a otro y luego vuelva
Publicado por: penumbra en Noviembre 01, 2015, 06:01:59 AM
En el objeto puerta:

[CREATE]
[gml]image_speed = 0[/gml]

[STEP]
[gml]
if distance_to_object(obj_player) < 64
     sprite_index = spr_puerta_abierta
else
     sprite_index = spr_puerta_cerrada
[/gml]

Cambia el 64 por la distancia que creas conveniente.
Título: Re:Como hacer que un objeto cambie de un sprite a otro y luego vuelva
Publicado por: Maxy en Noviembre 02, 2015, 12:25:55 AM
Gracias, me funciono jejejeje, pero... Quisiera si me podrias responder algo....

Veras... Quise probarlo si podia hacerlo con otros 2 jugadores mas, con el mismo objeto, pero... No me salio...  :-[
Entre 3 jugadores y la misma puerta, solamente reconoce a 1 jugador y los otros 2 no...
¿Me podrias decir como puedo hacer?  :'(

Gracias :3
Título: Re:Como hacer que un objeto cambie de un sprite a otro y luego vuelva
Publicado por: penumbra en Noviembre 02, 2015, 12:43:39 AM
Si las tres instancias jugador pertenecen al mismo objeto, puedes cambiar el código en [STEP] a
[gml]
if instance_nearest(x, y, obj_player)  < 64
     sprite_index = spr_puerta_abierta
else
     sprite_index = spr_puerta_cerrada
[/gml]

Título: Re:Como hacer que un objeto cambie de un sprite a otro y luego vuelva
Publicado por: Maxy en Noviembre 02, 2015, 12:59:00 AM
Mmmm ahora simplemente no me reconoce a ninguno....

Imaginate que tengo el jugado P1 , P2 y P3

El P1 Pasa por la puerta y se abre perfectamente
Pero al pasar el P2 y P3 no se abre y se queda cerrada...

¿Me podrias ayudar? :c

Gracias... Yyy perdon por las molestas :'v
Título: Re:Como hacer que un objeto cambie de un sprite a otro y luego vuelva
Publicado por: Guacusio en Noviembre 02, 2015, 01:05:24 AM
Entonces probablemente los jugadores no son instancias de un mismo objeto sino que son instancias de objetos diferentes. Si los 3 jugadores tienen los mismos códigos y eventos, conviene poner éstos en uno solo (por ejemplo, en P1) y hacer que éste sea el parent de los otros, y medir la distancia a este objeto. Si tienen distintos códigos en sus eventos, puedes crear un nuevo objeto (por ejemplo, P) sin ningún evento, hacer que sea parent de los otros 3 objetos y medir la distancia a P.
Título: Re:Como hacer que un objeto cambie de un sprite a otro y luego vuelva
Publicado por: Maxy en Noviembre 02, 2015, 01:10:39 AM
Mmmm no entendi esto, por que la verdad no me funciono....



Cita de: penumbra en Noviembre 02, 2015, 12:43:39 AM
Si las tres instancias jugador pertenecen al mismo objeto, puedes cambiar el código en [STEP] a
[gml]
if instance_nearest(x, y, obj_player)  < 64
     sprite_index = spr_puerta_abierta
else
     sprite_index = spr_puerta_cerrada
[/gml]
Título: Re:Como hacer que un objeto cambie de un sprite a otro y luego vuelva
Publicado por: Guacusio en Noviembre 02, 2015, 02:00:40 AM
Cita de: Maxy en Noviembre 02, 2015, 01:10:39 AM
Mmmm no entendi esto, por que la verdad no me funciono....



Cita de: penumbra en Noviembre 02, 2015, 12:43:39 AM
Si las tres instancias jugador pertenecen al mismo objeto, puedes cambiar el código en [STEP] a
[gml]
if instance_nearest(x, y, obj_player)  < 64
     sprite_index = spr_puerta_abierta
else
     sprite_index = spr_puerta_cerrada
[/gml]

Probablemente lo que penumbra quiso decir fue esto:

if distance_to_object(instance_nearest(x, y, obj_player))  < 64
     sprite_index = spr_puerta_abierta
else
     sprite_index = spr_puerta_cerrada


que es lo que se requiere hacer cuando hay más de un jugador, puesto que es necesario encontrar primero cuál instancia del objeto jugador es la más cercana a la puerta antes de medir a qué distancia está.

EDIT: leyendo la descripción de la función distance_to_object (tanto para  :GM8: como para  :GMS:), ya está incluido en ella el tomar la instancia más cercana, así que el código original que puso penumbra debiera ser suficiente:

if distance_to_object(obj_player) < 64
     sprite_index = spr_puerta_abierta
else
     sprite_index = spr_puerta_cerrada


Esto funciona si los jugadores son instancias del mismo objeto obj_player. Como sólo te funciona para uno de los 3 jugadores, se deduce que estás usando objetos distintos para cada jugador. En ese caso, aplica lo que dije antes sobre los parent.
Título: Re:Como hacer que un objeto cambie de un sprite a otro y luego vuelva
Publicado por: kostra en Noviembre 02, 2015, 12:11:35 PM
if distance_to_object(player1) or distance_to_object(player2)  or distance_to_object(player3) ...

Nadie le dice de ser más de un objeto distinto? xD
Título: Re:Como hacer que un objeto cambie de un sprite a otro y luego vuelva
Publicado por: penumbra en Noviembre 02, 2015, 08:00:36 PM
Si los objetos que abren las puertas son objetos distintos en el árbol de recursos, entonces a todos esos objetos les puedes asignar un MISMO objeto padre (botón "parent") vacío (sin código ni sprite), como mencionó antes Guacusio.

Despues, en el código original, cambias obj_player por el nombre del objeto parent y con eso, los tres objetos podrían abrir la puerta.
Título: Re:Como hacer que un objeto cambie de un sprite a otro y luego vuelva
Publicado por: Maxy en Noviembre 03, 2015, 02:02:59 AM
Yyyy como hago el ''Parent'' :'v
Título: Re:Como hacer que un objeto cambie de un sprite a otro y luego vuelva
Publicado por: penumbra en Noviembre 03, 2015, 02:10:07 AM
El parent es en principio un objeto vacío, sólo necesitas darle un nombre. Luego, para hacer que OTRO objeto sea hijo de ese parent, usas el botón parent (en ese otro objeto). El parent también puede contener código, pero eso es harina de otro costal y no es necesario para el caso de este hilo.

(http://i.imgur.com/ebz1Xja.png)

Más información:
http://docs.yoyogames.com/source/dadiospice/001_advanced%20use/more%20about%20objects/parents.html