Estoy creando un runner y cada 60 paso estoy creando 3 monedas seguidas separadas por 90 pixeles para poder recogerlas. el caso es que cuando comprueblo la colision del objeto jugador para que al tocar la moneda se destruya se destruyen todas las monedas ... pero cuando la colision lo hago desde el objeto moneda se destruye una a una ¿? por que?? y como se puede hacer funcionar desde el objeto jugador

Te olvidas de dar detalles del código EXACTO que usas. Nadie es adivino para saber cómo y dónde manejas la colisión y destrucción de instancias, así que no es fácil saber en dónde está el error.

instance_destroy() es una función que sólo actua localmente, es decir, se tiene que llamar en la misma instancia que se quiere destruir, además, como el mismo nombre lo indica, el efecto es por instancia, no por objeto, por eso cuando el código va en el objeto moneda funciona bien.

Lo siguiente es una suposición que no se si aplique debido a que no das detalles de cómo usas el código:

[gml]with(obj_moneda)
     instance_destroy()[/gml]
Si usas este código (sin importar en qué objeto), la funcion  instance_destroy() se va a ejecutar a TODAS las instancias de obj_moneda que existan en la habitación porque estás dando como argumento un objeto (en lugar de una instancia)

Si quieres destruír la moneda desde el objeto jugador, una manera es usar el vento de colisión player - moneda:
[gml]with(other)
     instance_destroy()[/gml]
en donde other representa a la otra instancia individual (y no un objeto) involucrada en la colisión.


ya imagino que no hay adivinos, gracias por la explicacion. Majete