Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Kain88 en Agosto 17, 2020, 03:23:36 AM

Título: [SOLUCIONADO] Que el código afecte solo a una instancia
Publicado por: Kain88 en Agosto 17, 2020, 03:23:36 AM
Hola, tengo el objecto "bala" que dispara el personaje y rebota en determinados enemigos cuando los golpea. El problema es que cuando una instancia de la bala rebota, el código hace que todas las demás también reboten aunque no hayan tocado al enemigo.

Hay alguna manera de hacer que solo afecte a la instancia que choca con el enemigo?
Título: Re:que el codigo afecte solo a una instancia
Publicado por: T789 en Agosto 17, 2020, 03:37:04 AM
¿Podrias mostrar un poco tu codigo para entender mejor?, por lo que dices, si una rebota todas las instancias lo hacen

Por casualida no te estas referiendo al objeto mismo con un with(), igual sugiero que muestres un poco el codigo que usas, de esa forma sabriamos en que esta fallando  ???
Título: Re:que el codigo afecte solo a una instancia
Publicado por: Kain88 en Agosto 17, 2020, 03:55:59 AM
Cita de: T789 en Agosto 17, 2020, 03:37:04 AM
¿Podrias mostrar un poco tu codigo para entender mejor?, por lo que dices, si una rebota todas las instancias lo hacen

Por casualida no te estas referiendo al objeto mismo con un with(), igual sugiero que muestres un poco el codigo que usas, de esa forma sabriamos en que esta fallando  ???

Gracias por responder, asi es, uso with() pero probé usando arma.variable y sucede lo mismo

if (place_meeting(x + sign(image_xscale), y, obj_buster)) {
        with (obj_buster) {
            hsp = 0;
            if (image_xscale = -1)
                direction = 45;
            else direction = 135;
            speed = 5;
        }
}
Título: Re:que el codigo afecte solo a una instancia
Publicado por: T789 en Agosto 17, 2020, 04:11:48 AM
Asi esta mucho mejor  :-[, ya que usas el with(), porque no pruebas a usar la instancia en vez del objeto en si. Supongo que cuando creas una bala, esta la almacenas en una variable y si ese es el caso entonces porque no la usas en el with()
[gml]
if (place_meeting(x + sign(image_xscale), y, obj_buster)) {
    with(bullet) {
        hsp = 0;
        if (image_xscale = -1)
            direction = 45;
            else direction = 135;
            speed = 5;
    }
}
[/gml]
Y si lo que haces es crear balas independientes pues... te sugiero agregarla a una variable normal
[gml]
bullet = instance_create(x, y, obj_buster);
[/gml]
Otra duda que tengo, ¿es que si ese codigo lo colocas en el obj_buster? Pues si asi es entonces dejame decirte que se derrocha para nada ese with()
Título: Re:que el codigo afecte solo a una instancia
Publicado por: Kain88 en Agosto 17, 2020, 04:17:11 AM
Cita de: T789 en Agosto 17, 2020, 04:11:48 AM
Asi esta mucho mejor  :-[, ya que usas el with(), porque no pruebas a usar la instancia en vez del objeto en si. Supongo que cuando creas una bala, esta la almacenas en una variable y si ese es el caso entonces porque no la usas en el with()
[gml]
if (place_meeting(x + sign(image_xscale), y, obj_buster)) {
    with(bullet) {
        hsp = 0;
        if (image_xscale = -1)
            direction = 45;
            else direction = 135;
            speed = 5;
    }
}
[/gml]
Y si lo que haces es crear balas independientes pues... te sugiero agregarla a una variable normal
[gml]
bullet = instance_create(x, y, obj_buster);
[/gml]
Otra duda que tengo, ¿es que si ese codigo lo colocas en el obj_buster? Pues si asi es entonces dejame decirte que se derrocha para nada ese with()

Nono, el codigo esta en el enemigo en el que rebota la bala, el objeto buster es el nombre las balas, precisamente  :-[

Voy a probar ese método y luego te cuento, gracias!
Título: Re:que el codigo afecte solo a una instancia
Publicado por: bygdle en Agosto 17, 2020, 04:19:32 AM
[gml]
var obj = instance_place(x + sign(image_xscale), y, obj_buster);
if(instance_exists(obj))
with(obj) {
    // bla bla bla...
}
[/gml]
http://docs.yoyogames.com/source/dadiospice/002_reference/objects%20and%20instances/instances/instance%20functions/instance_place.html
Título: Re:que el codigo afecte solo a una instancia
Publicado por: T789 en Agosto 17, 2020, 04:21:23 AM
Ups creo que me confundi un poco  :-[

Otra forma mas rapida y ligera de hacerlo es con la funcion instance_place(), que tambien devuelve el numero de la instancia con la que colisionas
[gml]
with(instance_place(x+sign(image_xscale), y, obj_buster))
{
   hsp = 0;
   if (image_xscale == -1)
      direction = 45;
      else direction = 135;
      speed = 5;
}
[/gml]
Y esa es otra forma de reutilizar el with()
Título: Re:que el codigo afecte solo a una instancia
Publicado por: Kain88 en Agosto 17, 2020, 04:53:45 AM
Gracias por tu ayuda! Lo solucioné usando el primer método que me dijiste
Título: Re:que el codigo afecte solo a una instancia
Publicado por: Kain88 en Agosto 17, 2020, 07:39:57 AM
Cita de: bygdle en Agosto 17, 2020, 04:19:32 AM
[gml]
var obj = instance_place(x + sign(image_xscale), y, obj_buster);
if(instance_exists(obj))
with(obj) {
    // bla bla bla...
}
[/gml]
http://docs.yoyogames.com/source/dadiospice/002_reference/objects%20and%20instances/instances/instance%20functions/instance_place.html

Gracias! Voy a probarlo también