Agosto 17, 2020, 03:23:36 AM Ultima modificación: Agosto 17, 2020, 07:38:50 AM por Kain88
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?

¿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  ???

#2 Agosto 17, 2020, 03:55:59 AM Ultima modificación: Agosto 17, 2020, 03:58:05 AM por Kain88
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;
        }
}

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()

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!

[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
alaberga regué el café.

BA:STFW&RTFM

#6 Agosto 17, 2020, 04:21:23 AM Ultima modificación: Agosto 17, 2020, 04:28:36 AM por T789
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()

Gracias por tu ayuda! Lo solucioné usando el primer método que me dijiste

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