Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: NikoStar YT en Noviembre 11, 2017, 03:30:23 PM

Título: Objeto dentro de objeto
Publicado por: NikoStar YT en Noviembre 11, 2017, 03:30:23 PM
Buenas, quiero crear un objeto dentro de las coordenadas de otro (un enemigo disparando desde la pistola) pero al  intentar hacerlo y poner varios enemigos en la room solo dispara uno. El código en el evento step del enemigo:

if image_xscale=1 {lado=1}
else
{lado=2}

fue=fue+1

if fue>50 and lado=1 {fue=0 ; instance_create(enemigo.x-70,enemigo.y-15,fuego)}
if fue>50 and lado=2 {fue=0 ; instance_create(enemigo.x+43,enemigo.y-15,fuego)}

En el evento create:

hspeed=-3
velo=0
vidas=8
fue=0

En el evento create del objeto que hace de bala ( el que se crea ):

hspeed=-15*enemigo.image_xscale


Creo que esto se debe a que todos los disparos se concentran en un solo enemigo que es el que esta mas cerca y por eso aparece que solo dispara uno.

Soy bastante novato, tampoco os riais de mis códigos xd.

Pues a ver si me podeis ayudar a cambiar el código o algo , os lo agradeceria mucho
Título: Re:Objeto dentro de objeto
Publicado por: bygdle en Noviembre 11, 2017, 03:47:01 PM
Hay varias cosas que puedes optimizar, a ver si el funcionamiento mejora.

Primero, puedes ahorrarte el uso de la variable fue; para eso Game Maker tiene las alarmas.
El evento Create está bien así como lo tienes, eliminando la variable mencionada.
[gml]
hspeed = -3;
velo = 0;
vidas = 8;
[/gml]

Ahora, en el evento Step no necesitas usar la variable lado; puedes comprobar directamente image_xscale.
Unos errores (estos sí errores) es que utilizas la identificación del objeto enemigo como tal, y no de la instancia que actúa. Por ejemplo, estableces la escala de la bala desde su evento Create, utilizando el objeto enemigo como tal. Esto revisará dentro de la primera instancia del enemigo en la sala, no dentro del enemigo que ha disparado. El otro problema es que dentro del step del mismo enemigo usas enemigo.x; sucede lo mismo que te dije antes.

Lo solucionas así:
[gml]
if(!alarm[0]) //Si la alarma está desactivada (como por defecto lo está)
{
   var pos = -70;
   if(image_xscale <> 1)
      pos = 43;

   var bala = instance_create(x + pos, y - 12, fuego); //Como estás en el step del enemigo,
                                          //sólo usa x e y.

   bala.image_xscale = image_xscale; //La escala de la bala será la del objeto que la creó.

   alarm[0] = 50; //Activas la alarma.
   //Las alarmas automáticamente van en cuenta regresiva.
}
[/gml]

Y por último, en el evento Alarm 0, pones un comentario, sólo para que la alarma se ejecute:
[gml]
///Evento alarm 0. Aquí no es necesario poner nada importante. Sólo
//se necesita texto en el código para que se ejecute la alarma.
[/gml]
Título: Re:Objeto dentro de objeto
Publicado por: NikoStar YT en Noviembre 28, 2017, 08:12:35 PM
graciaaas ya funciona :D