Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

* 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: [SOLUCIONADO] Que el código afecte solo a una instancia  (Leído 515 veces)

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

Desconectado 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?
« Última modificación: Agosto 17, 2020, 07:38:50 am por Kain88 »

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado T789

Respuesta #1 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  ???

 


Desconectado Kain88

Respuesta #2 en: Agosto 17, 2020, 03:55:59 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

Código: [Seleccionar]
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;
        }
}
« Última modificación: Agosto 17, 2020, 03:58:05 am por Kain88 »

 


Desconectado T789

Respuesta #3 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()
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;
    }
}
Y si lo que haces es crear balas independientes pues... te sugiero agregarla a una variable normal
bullet = instance_create(x, y, obj_buster);
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()

 


Desconectado Kain88

Respuesta #4 en: Agosto 17, 2020, 04:17:11 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()
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;
    }
}
Y si lo que haces es crear balas independientes pues... te sugiero agregarla a una variable normal
bullet = instance_create(x, y, obj_buster);
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!

 


Desconectado bygdle

  • Flota de Justicia Particular.
  • Moderadores globales
  • Okupa
  • *
  • Puntos: 2848
  • Mensajes: 1.715
  • Agradecido: 152 veces
  • Sexo: Masculino
  • Thomas the dank engine.
    • Ver Perfil
Respuesta #5 en: Agosto 17, 2020, 04:19:32 am
var obj = instance_place(x + sign(image_xscale), y, obj_buster);
if(instance_exists(obj))
with(obj) {
    // bla bla bla...
}
http://docs.yoyogames.com/source/dadiospice/002_reference/objects%20and%20instances/instances/instance%20functions/instance_place.html

alaberga regué el café.

BA:STFW&RTFM
 
Los siguientes usuarios dieron las gracias a este tema: Kain88


Desconectado T789

Respuesta #6 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
with(instance_place(x+sign(image_xscale), y, obj_buster))
{
   hsp = 0;
   if (image_xscale == -1)
      direction = 45;
      else direction = 135;
      speed = 5;
}
Y esa es otra forma de reutilizar el with()
« Última modificación: Agosto 17, 2020, 04:28:36 am por T789 »

 
Los siguientes usuarios dieron las gracias a este tema: Kain88


Desconectado Kain88

Respuesta #7 en: Agosto 17, 2020, 04:53:45 am
Gracias por tu ayuda! Lo solucioné usando el primer método que me dijiste

 


Desconectado Kain88

Respuesta #8 en: Agosto 17, 2020, 07:39:57 am
var obj = instance_place(x + sign(image_xscale), y, obj_buster);
if(instance_exists(obj))
with(obj) {
    // bla bla bla...
}
http://docs.yoyogames.com/source/dadiospice/002_reference/objects%20and%20instances/instances/instance%20functions/instance_place.html

Gracias! Voy a probarlo también