Noticias

¡Ayuda a la Comunidad GM, haz una donación!

* Sponsor

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Capturar texto dibujado en un objeto  (Leído 741 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado EdwinMath

  • Visitante
  • *
  • Puntos: 10
  • Mensajes: 4
    • Ver Perfil
en: Enero 02, 2022, 06:19:15 pm
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:

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado dixon

Respuesta #1 en: Enero 02, 2022, 08:40:59 pm
Hola, saludos.



Quizás hiciste algo como esto:
Código: [Seleccionar]
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:
Código: [Seleccionar]
variableTexto=”soy el objeto x”;
draw_text(x,y,variableTexto);

En el evento creación (CREATE) también deberás colocar:
Código: [Seleccionar]
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:
Código: [Seleccionar]
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.
Código: [Seleccionar]
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.
Código: [Seleccionar]
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:
Código: [Seleccionar]
variableCapturadora = nnn.variableTexto;
« Última modificación: Enero 02, 2022, 08:44:24 pm por dixon »

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é.
 
Los siguientes usuarios dieron las gracias a este tema: Ikaro3d, EdwinMath


Desconectado EdwinMath

  • Visitante
  • *
  • Puntos: 10
  • Mensajes: 4
    • Ver Perfil
Respuesta #2 en: Enero 02, 2022, 10:36:59 pm
 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.