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  :-[  :)
Tio Max

#1 Noviembre 01, 2015, 06:01:59 AM Ultima modificación: Noviembre 01, 2015, 06:13:13 AM por penumbra
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.

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
Tio Max

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]


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
Tio Max

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.


#6 Noviembre 02, 2015, 01:10:39 AM Ultima modificación: Noviembre 02, 2015, 01:38:42 AM por Maxy
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]
Tio Max

#7 Noviembre 02, 2015, 02:00:40 AM Ultima modificación: Noviembre 02, 2015, 02:08:57 AM por Guacusio
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.


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
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

#9 Noviembre 02, 2015, 08:00:36 PM Ultima modificación: Noviembre 02, 2015, 08:12:10 PM por penumbra
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.


#11 Noviembre 03, 2015, 02:10:07 AM Ultima modificación: Noviembre 03, 2015, 02:19:50 AM por penumbra
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.



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