Cordial saludo comunidad GM

en un objeto he dibujado un texto mediante el evento Draw,  ese objeto tiene varias instancias y en cada instancia el texto es diferente.
No he logrado encontrar la manera de capturar el texto que tiene la instancia al momento de una colisión con otro objeto. 

agradezco su colaboración, estoy trabajando con GameMaker Studio 2


:GMS:

#1 Enero 02, 2022, 08:40:59 PM Ultima modificación: Enero 02, 2022, 08:44:24 PM por dixon
Hola, saludos.



Quizás hiciste algo como esto:

draw_text(x,y,"Soy el objeto x");


Lo adecuado es introducir el texto dentro de una variable y usar esa variable como el siguiente código:

variableTexto="soy el objeto x";
draw_text(x,y,variableTexto);


En el evento creación (CREATE) también deberás colocar:
variableTexto="soy el objeto x";

Ahora mencionas a un objeto que capturará el texto que contenga la instancia luego de colisionar con ella.

Para resolver eso debemos identificar a los objetos que intervienen en el proceso:

objetoTexto: objeto que contiene el texto, el cual tiene varias instancias.
objetoCapturador: objeto que capturará el texto de alguna instancia del objetoTexto.
Tambien debemos identificar las variables que intervendrán en el proceso:
variableTexto: es la variable del objetoTexto que contiene el texto del objeto la cual varía en cada instancia.
variableCaptura: es la variable del objetoCapturador la cual almacenará el texto que contenga la instancia con la cual colisione.
Entonces el proceso es el siguiente:
1.   El objetoCapturador colisiona con una instancia del objetoTexto.
2.   El objetoCapturador identifica a la instancia.
3.   El objetoCapturador toma el texto almacenado en la variableTexto del objetoTexto.
4.   El objetoCapturador almacena el texto capturado en su propia variableCaptura.

Códigos necesarios para el objetoCapturador:
   "OBJETOCAPTURADOR."
1.   El objetoCapturador colisiona con una instancia del objetoTexto.
Supongo que estás usando un evento de colision o quizás estas usando place_empty o place_free o place_meeting, u otra técnica para interpretar una colision.

2.   El objetoCapturador identifica a la instancia:
En el evento de colisión deberás colocar:

nnn=instance_nearest(x,y,objectTexto);
variableCaptura = nnn.variableTexto;


   Listo, el objeto capturador tiene en su variableCaptura el valor de la variableTexto de la instancia con la cual ha colisionado.

¿Cómo funciona?
1.   La función instance nearest devuelve o retorna el id o identificador único de la instancia más cercana al punto indicado, en este cado los puntos son x,y los cuales hacen referencia a la posición del objetoCapturador.
2.   ¿Cómo es eso que devuelve? , Respuesta: Eso quiere decir que nos dará el nombre único de la instancia.
3.   ¿Qué es el nombre único? , Respuesta: Es el id, o el identificador único que tiene cada instancia, es su nombre.
4.   ¿Para qué quiero el identificador único? , Respuesta: Con el identificador único podemos acceder a cualquier variable interna de la instancia.
5.   ¿Cómo obtenemos una variable interna de la instancia? ,Respuesta:
a.   Primero almacenamos su identificador único en una variable, en este caso la llamaremos nnn.

nnn=instance_nearest(x,y,objetoTexto);

Esto quiere decir que ahora la variable nnn contiene el nombre único de la intancia.

b.   Luego le colocamos un punto seguido de la variable para acceder a cualquier otra variable interna de la instancia.

nnn.x
nnn.y
nnn.sprite_index
nnn.speed
nnn.hspeed
nnn.image_index

c.   Luego almacenamos en una variable el valor de la variable a obtener:

variableCapturadora = nnn.variableTexto;

Si Dios quiere; Limpiaré la oficina, puliré el piso y les serviré café a todos, luego, me enseñarán a programar e iré a comprarles más café.

 Dixon

efectivamente ese era el camino, solo me faltaba identificar la instancia, agregué esas dos líneas de código y ya funcionó perfectamente.
Muchísimas gracias.

saludos.