Destruir objeto cuyo nombre esta dentro de una variable

Publicado por Tornadeitor, Enero 09, 2023, 11:33:34 AM

Tema anterior - Siguiente tema

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

Tornadeitor

Buenos días.
Tengo una duda que seguro es muy fácil de solucionar, pero por más que busco no encuentro como solucionarlo.
Necesito poder destruir un objeto pero sin darle directamente el nombre del  mismo, si no que el nombre del objeto este contenido dentro de una variable. Sería algo así:

variable = objeto1

instance_destroy(variable)

Pero esto no funciona, ¿alguien puede decirme el código exacto?
También necesito lo mismo, pero para crear el objeto en cuestión, pero para eso supongo que será igual que lo anterior, solo que cambiando el instance_destroy por instance_create

El código que tengo que crear es algo así:

variable = object_get_name(object_index);

Y cuando algo en el juego suceda recupero ese objeto de la siguiente manera:

instance_destroy(variable)

Pero no funciona, el problema está que creo que GameMaker espera que le de directamente el nombre del objeto, y no lo coge de la variable.

Aprovecho para preguntar, si de la misma manera que puedo almacenar el nombre de un objeto en una variable
variable = object_get_name(object_index);
¿cuál sería el código para almacenar el nombre de esa instancia en concreto?

Gracias.

dixon

Hola, saludos.

....
Intenta mezclar las siguientes barajas y lograrás la magia:

1.

variable = instance_create(x,y,object0);

with(variable){
instance_destroy();
}

2. Investiga lo siguiente:

Para detetminar el objeto, es decir para señalarlo o identificarlo:

A) object_index
B) instance_nearest
C) instance_position
D) instance_number

Luego de identificalo guardas en una variable su nombre o id.. El nombre seria su id....

variable = instance_position....

Para continuar con with

with(variable){
instance_destroy();
}



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

Luego... para crearlo denuevo tienes que almacenar previamente el tipo de objeto, investiga:

variable = instance_neares...
variable_objeto_tipo = variable.object_index

//primero destruimos
With(variable){
Instance_destroy()
}

//luego creamos
instance_create(x,y,variable_objeto_tipo);

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

#3
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é.

Tornadeitor

Gracias dixon, mañana le hechare un vistazo a ver que tal.

Por cierto, cuando creo varios objetos iguales, cada uno tiene un nombre de instancia propio, es así? Para poder guardar ese nombre en una variable y poder diferenciarlo de los demas objetos iguales, con que codigo tendría que hacerlo?
Busco algo asi como
object_get_name(object_index)
pero para el nombre propio

dixon

Mmm....

Tu eres el que busca colaborador... por este medio podré colaborar contigo pero solo por este medio ya que mi falta de internet solo me permite usar esta web adecuadamente.

Cualquier duda que tengas presentala y trataré de guiarte.

tienes que especificar la version de game maker que usas porque alguas funciones cambian...

Dejame contar algo:
Mi preferida era game maker 4 del año 2000 pero por motivos de funcionalidad me cambié a game maker 8, sin embargo ni esta ni las siguientes se adaptan a mis exigencias por eso ahora me estoy iniciando en la creacion de juegos con javaScript puro y es un poco mas complejo pero dominable de esa forma podré vencer ciertos límites del game maker.

Ahora en cuanto a tu pregunta:

Cada objeto creado o duplicado a partir de un objeto modelo adquiere un nombre propio aunque sea del mismo tipo. Pero no dice "nombre" , se dice "id", por eso cada objeto adquiere un id distinto y por medio de su id podremos controlarlo. cada objeto tiene una variable llamada id que almacena su nombre o idemtificador unico Y puedes usarla asi:

nombre = id
draw_text(0,0,'nombre: ' + string(nombre))

Pero si te encuentras codificando en otro objeto y quieres identificar a un objeto distinto tienes que valerte de las funciones instance_position, instance_nearest,  y mas... tienes que leer sobre eso.

Ahora cada copia de un mismo objeto no se le llama objeto se le llama instancia... las instancias son clones del objeto principal...Es decir si creas un objeto pelota y quieres colocar varios en el juego entonces estaras colocando instancias y cada una tiene un id (nombre), el id esta compuesto de numeros y letras, esto varia segun la version de game maker, el id es asignado por el sistema y no puede ser cambiado.

Para que puedas comprender eso muy bien tienes que leer el manual y las funciones que te he indicado.

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é.

Tornadeitor

#6
Perfecto luego lo pruebo y te cuento.

El tema de buscar colaborador era para seguir aprendiendo mientras realizaba algún proyecto algo más ambicioso que ir haciendo pruebas de cosas especificas sueltas, y tener alguien con quien compartir ideas y experimentar, pero pensaba que estaba más suelto en GameMaker hasta que he decidido crear un juego de cartas, donde me he dado cuenta que estoy muy verde todavía jajaja. De todas formas, si te animas podemos abrir un hilo para nosotros y hablar de algún proyecto para empezar juntos, yo por mi trabajo no tengo mucho tiempo, pero le dedicaría mis ratitos libres.

Me gustaría hacer algún juego de tipo roguelike donde haya cartas coleccionables para formar estrategia. Pensaba que donde más complicaciones iba a tener es en el tema de la IA enemiga, por lo que decidí hacer algo muy simplón, pero a la primera de cambio me quedé atascado en una de las mecánicas que quería implantar. Me estoy dando cuenta que hay mucho código que facilitan las cosas, pero al desconocerlo tengo que estar complicando mucho las funciones con códigos innecesarios y luego para modificar algo no veas que trabajito me cuesta porque ya ni me acuerdo para que servía cada variable :-[

Quiero ponerme a aprender en serio el lenguaje de programación de GameMaker pero no sé por dónde empezar, lo más que encuentro son pequeños tutoriales para hacer juegos pero no hay nada que realmente te enseñe desde 0 el lenguaje en sí, así que seguramente empiece leyendo el manual.
Por cierto, actualmente uso GameMaker Studio 2.


Tornadeitor

Pues ya he conseguido dar con una solución, la explico por si alguien tiene la misma duda:

1er Objeto: (Este objeto recoge el nombre de un objeto y lo almacena en la variable varOBJ como cadena de texto (string))
varOBJ = object_get_name(object_index)


2do Objeto: (Este segundo objeto, transforma la cadena de texto (string) de la variable varOBJ en el nombre de un objeto y lo almacena en la variable obj (para que se pueda usar en el instance_create_layer, ya que si pongo varOBJ directamente no funciona))
Y luego, crea una instancia del objeto que contiene el nombre la variable obj, que es el nombre que contenia la variable varOBJ.

obj = asset_get_index(varOBJ);
instance_create_layer(x+50, y+50, obj);

Tornadeitor

Cita de: dixon en Enero 10, 2023, 03:32:57 AMMmm....

Tu eres el que busca colaborador... por este medio podré colaborar contigo pero solo por este medio ya que mi falta de internet solo me permite usar esta web adecuadamente.

Cualquier duda que tengas presentala y trataré de guiarte.

tienes que especificar la version de game maker que usas porque alguas funciones cambian...

Dejame contar algo:
Mi preferida era game maker 4 del año 2000 pero por motivos de funcionalidad me cambié a game maker 8, sin embargo ni esta ni las siguientes se adaptan a mis exigencias por eso ahora me estoy iniciando en la creacion de juegos con javaScript puro y es un poco mas complejo pero dominable de esa forma podré vencer ciertos límites del game maker.

Ahora en cuanto a tu pregunta:

Cada objeto creado o duplicado a partir de un objeto modelo adquiere un nombre propio aunque sea del mismo tipo. Pero no dice "nombre" , se dice "id", por eso cada objeto adquiere un id distinto y por medio de su id podremos controlarlo. cada objeto tiene una variable llamada id que almacena su nombre o idemtificador unico Y puedes usarla asi:

nombre = id
draw_text(0,0,'nombre: ' + string(nombre))

Pero si te encuentras codificando en otro objeto y quieres identificar a un objeto distinto tienes que valerte de las funciones instance_position, instance_nearest,  y mas... tienes que leer sobre eso.

Ahora cada copia de un mismo objeto no se le llama objeto se le llama instancia... las instancias son clones del objeto principal...Es decir si creas un objeto pelota y quieres colocar varios en el juego entonces estaras colocando instancias y cada una tiene un id (nombre), el id esta compuesto de numeros y letras, esto varia segun la version de game maker, el id es asignado por el sistema y no puede ser cambiado.

Para que puedas comprender eso muy bien tienes que leer el manual y las funciones que te he indicado.



Gracias por molestarte en explicarme todo eso amigo, le he dado un repaso y me parece muy interesante, iré probándolo todo.

dixon

Hola tornadeitor he creado un post llamado "Alianza rogué like" destinado a crear cualquier juego principalmente rogué like, en este podremos mantenernos comunicados. No es un post exclusivo cualquier persona puede participar.

https://www.comunidadgm.org/general/alianza-roguer-like/
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é.

Tornadeitor


Powered by EzPortal
SMF spam blocked by CleanTalk