Noticias

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

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: Como copiar un objeto, que no sea el orignal?  (Leído 321 veces)

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

Desconectado HexPol

  • Visitante
  • *
  • Puntos: 7
  • Mensajes: 4
  • Sexo: Masculino
    • Ver Perfil
en: Abril 22, 2019, 02:30:26 pm
Hola!
 primero que nada, presentarme, soy HexPol, no soy nuevo en game maker, aunque llevo un parón de 2 años desde la última vez que lo usé. El caso es que ahora mismo estoy desarrollando un proyecto , el cual considero que tiene las bases suficientes como para poder adquirir algo de soltura después de años oxidado.

Pues bien, en este proyecto necesito hacer que un objeto, se replique en 2 y se elimine así mismo, claro, esto a primeras es simple, puedo hacer la de

instance_create(x,y,MiObjeto);

 pero, mediante variables, modifico los valores iniciales de MiObjeto, entonces lo que quiero, es que los objetos nuevos, sean copias de del que generó estos 2 últimos objetos, es decir, el objeto modificado y no el original.

Sé que me explico como un libro cerrado y me ando por las ramas, pero si alguien entiende mi problema y sabe solucionarlo, agradecería muchisísimo la ayuda!

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Conectado Black_Cat

  • Ganador CGM Game Jam #1
  • Adicto
  • *
  • Puntos: 742
  • Mensajes: 353
  • Agradecido: 59 veces
  • 🧡🧡🧡🧡🧡
    • Ver Perfil
Respuesta #1 en: Abril 22, 2019, 03:02:12 pm
Lo que tienes que hacer es asignar uno a uno los atributos a las intancias creadas.
Por ejemplo si yo tengo un obj_perro:
ev_Create
//Evento Create del obj_perro
raza = ""
Inicialmente mi objeto es un perro indefinido, pero me apetece darle una raza en cualquier momento:
//por ejemplo, Alamra0 del obj_perro
raza = "dalmata"
Luego querría crear dos instancias, para ello, necesiarías usar instance_create() y almacenar las instancias nuevas, dentro de variables:
///cualquier evento dentro de obj_perro
dalmata1 = instance_create(x,y, obj_perro)
dalmata2 = instance_create(x,y, obj_perro)
Después tendrías que asignar, como se dijo al inicio, los atributos uno a uno:
///cualquier evento dentro de obj_perro
dalmata1 = instance_create(x,y, obj_perro)
dalmata2 = instance_create(x,y, obj_perro)

dalmata1.raza = self.raza  
dalmata2.raza = self.raza
Asi asignarias a cada instancia el mismo atributo que tiene el objeto, que las crea.
Luego bastaría con que lo eliminaras:
///cualquier evento dentro de obj_perro
dalmata1 = instance_create(x,y, obj_perro)
dalmata2 = instance_create(x,y, obj_perro)

dalmata1.raza = self.raza  
dalmata2.raza = self.raza

instance_destroy()
Finalmente tendrías un objeto perro, que fue modificado y creó otras 2 instancias modificadas, y luego se destruyó.

Citar
Sé que me explico como un libro cerrado y me ando por las ramas
Lo mejor que podés hacer para explicarte, es poner ejemplo de lo que estás haciendo y lo que querés lograr finalmente.
Pasa mucho de hecho, lo vi en otros foros, de que la gente gasta más tiempo intentando pedir perdon que intentando poner ejemplos para darse a entender XD

Únete al servidor mas chidori de Discord

 
Los siguientes usuarios dieron las gracias a este tema: HexPol


Desconectado HexPol

  • Visitante
  • *
  • Puntos: 7
  • Mensajes: 4
  • Sexo: Masculino
    • Ver Perfil
Respuesta #2 en: Abril 22, 2019, 03:33:12 pm
Uhmmm gracias!
 pues si, tienes razón, lo que pretendo hacer, es un "simulador" de ecosistema(no creo que llegue a ser simulador, pero tampoco es juego como tal, de ahí las comillas)si un individuo al alcanzar x cantidad de energía se reproduce(genera 2 individuos eliminándose a si mismo) hay posibilidades de que salga mutado y si es viable a las condiciones que establece el usuario, sobrevive, creando al final un ecosistema.Nada complejo, la diferencia entre especies es color de círculos. En realidad no es difícil y lo que me causa problemas era eso por lo cual abrí  el hilo. muchas gracias

Hay una cosa que termino de entender y es que:
//por ejemplo, Alamra0 del obj_perro
raza = "dalmata"

tiene que ser Alarma0? o puede ser en cualquier otro evento
« última modificación: Abril 22, 2019, 03:49:25 pm por HexPol »

 


Conectado Black_Cat

  • Ganador CGM Game Jam #1
  • Adicto
  • *
  • Puntos: 742
  • Mensajes: 353
  • Agradecido: 59 veces
  • 🧡🧡🧡🧡🧡
    • Ver Perfil
Respuesta #3 en: Abril 22, 2019, 04:07:35 pm
Nah, puede ser cualquier evento. Era solo eso, un ejemplo

Únete al servidor mas chidori de Discord

 


Desconectado HexPol

  • Visitante
  • *
  • Puntos: 7
  • Mensajes: 4
  • Sexo: Masculino
    • Ver Perfil
Respuesta #4 en: Abril 22, 2019, 08:23:30 pm
no he podido probar el código hasta ahora y no me funciona, creo que es como he hecho el código, es así:

la variable mutante es para modificar colore que es la variable que da el color al sprite(la raza en tu ejemplo)

mutante= random_range(0,10) ;
colore = c_blue
image_blend=colore


if (mutante >= 8)then{
colore= make_color_rgb(random_range(0,255),random_range(0,255),random_range(0,255));
};

Todo esto, está en el evento create, por otro lado, en el evento step tengo:

(la variable energia no está puesta, pero basicamente mientras pruebo el código, son 3 clics)

randomize();
if (energia=200) then {

hijo1= instance_create(random_range(0,640),random_range(0,480),obj_ente1);
hijo2= instance_create(random_range(0,640),random_range(0,480),obj_ente1);

hijo1.colore = self.colore
hijo2.colore = self.colore

instance_destroy();
}

Como haces para poner los recuadros del game maker? así se ve mejor

 


Conectado Black_Cat

  • Ganador CGM Game Jam #1
  • Adicto
  • *
  • Puntos: 742
  • Mensajes: 353
  • Agradecido: 59 veces
  • 🧡🧡🧡🧡🧡
    • Ver Perfil
Respuesta #5 en: Abril 23, 2019, 03:52:10 am
Para poner el codigo GML tiene que ir asi:
Código: [Seleccionar]
[GML]
//codigo
[/GML]
y queda:
//codigo


El codigo que probé funciona perfectamente. En mi caso lo probé como sigue:
Evento create:
variable = 5
alarm[0] = 60
evento alarm0
var a,b;

variable = 8

a = instance_create(100, 0, object0)
b = instance_create(200, 0, object0)

a.variable = self.variable
b.variable = self.variable

instance_destroy();
evento draw:
draw_text(x,y, variable)

Y se cambia perfectamente el valor de las variables a 8 y crea las intancias con dicho valor.
A lo mejor tenés algun codigo que esta conflicuando desde otro lado.

Únete al servidor mas chidori de Discord

 
Los siguientes usuarios dieron las gracias a este tema: HexPol


Desconectado HexPol

  • Visitante
  • *
  • Puntos: 7
  • Mensajes: 4
  • Sexo: Masculino
    • Ver Perfil
Respuesta #6 en: Abril 23, 2019, 06:12:38 pm
Vale si, acabo de probar tu código tal y como pusiste y efectivamente: funciona a la perfección.
Sin embargo ya me he dado cuenta de por que no funcionaba conmigo! en lugar de usar números, yo uso colores:
variable = c_blue
image_blend=variable
por la razón que sea, no actualiza esta variable(o... lo que sea) pero bueno, como no voy a usar colores en si, si no lo que diferenciará un objeto de otro será comportamiento(que vendrá asociado a una variable numérica), por lo pronto, considero el problema solucionado. Muchas gracias!
Aunque ya siento curiosidad de porqué esto pasa, voy a investigar a ver si veo algo.

edit: he modificado el codigo para que sean números y no colores y he aquí el resultado(en adjunto) se ve que ya hay heredabilidad de las variables por lo menos,ahora asocio numeros a comportamientos y estará listo!

« última modificación: Abril 23, 2019, 06:29:40 pm por HexPol »