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!.

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - yottaomi

Páginas: 1 2 3
31
Preguntas y respuestas / Re:Agujerear una instancia
« en: Mayo 22, 2018, 01:31:19 pm »
Sí, si. Te entiendo.
Claro, más complejo. Pero creo que puede quedar bien. Intentaré hacerlo así.

Gracias por las respuestas.

32
Preguntas y respuestas / Re:Agujerear una instancia
« en: Mayo 19, 2018, 04:43:01 pm »
Gracias. De momento haré esto.
Aunque solo sea como curiosidad, ¿es posible realizar algo como lo que dije en el anterior mensaje?

33
Preguntas y respuestas / [SOLUCIONADO]Agujerear una instancia
« en: Mayo 19, 2018, 01:36:56 pm »
Mi duda surge de los bunkers del juego space invaders. Como en el original, ¿es posible con game maker agujerear de algún modo los bunkers pudiendo disparar a través de la grieta originada, sin destruir por completo la instancia y que las partes intactas sigan protegiendo?

34
Gracias. Ya está solucionado.

35
Clamud, ¿en dónde debería situar el código, en Alarm[0]? En cualquier caso no estoy seguro de entenderlo bien porque o me da error o directamente no se ejecuta el movimiento.

36
No logro encontrar un buen resultado con switch y el código que 3dgeminis escribió, me funcionó bien, pero solo en el caso de que hubiera una única instancia. Pero en el momento de que haya más de una el movimiento el movimiento es como si en un momento dado perteneciera a una de las instancias y al llegar al extremo de la room le perteneciera a otro. Y necesito 44 instancias del mismo objeto, lo cual vuelve el movimiento de las instancias del objeto un caos.

¿Qué solución le puedo dar?

37
Estoy intentando recrear el movimiento de las naves enemigas de space invaders, pero no consigo que bajen al mismo tiempo.

Hice varios intentos y aquí dejo uno de los más simples y menos engorrosos, con el el cual lo único que consigo es que cada fila vertical baje a un mismo tiempo, pero no todo el conjunto. Es decir, que bajan únicamente las naves que entran en contacto con el extremo de la pantalla, el resto espera a llegar.

(Este es código del objeto <parent>):

Create:
     move = 1;                //Cuando es 1 permite el movimiento lateral
     down_move = 0;      //Cuando es 1 permite el movimiento hacia abajo
     dir = 1;                   //Dirección horizontal: 1=derecha, 0=izquierda

Alarma[1]:
     move = 1;

Alarma[2]:
     down_move = 0;

Step:
//Movimiento Horizontal
     //Movimiento a la Derecha
if move = 1  and  dir = 1{        //Si move está accionado y la dirección es derecha
    move = 0;
    alarm[1] = 15;
    x += 12;
}

     //Movimiento a la Izquierda
if move = 1 and dir = 0{         //Si move está accionado y la dirección es izquierda
    move = 0;
    alarm[1] = 15;
    x -= 12;
}

     //Movimiento Vertical
if x >= room_width-32 and down_move = 0{    //Bajar al llegar al extremo derecho y cambiar dirección a izquierda
    dir = 0;
    down_move=1;
    alarm[2]=30;
    y += 32;
}

if x <= room_width-room_width+32 and down_move = 0{    //Bajar al llegar al extremo izquierdo y cambiar a dirección a derecha
    if dir = 0{dir=1;}
    down_move=1;
    alarm[2]=30;
    y += 32;
}

Espero no haberlo escrito de un modo innecesariamente complejo.

Por si no quedó claro la pregunta es, ¿qué hago para que bajen y se muevan lateralmente a un mismo tiempo?

38
Preguntas y respuestas / Re:evento alarma reiniciado
« en: Abril 27, 2018, 11:06:14 am »
Resulta que ya lo había solucionado sin darme cuenta, creando una variable que daba más resistencia a un tipo de enemigo que a otro.

Muchas gracias de todos modos.

39
Preguntas y respuestas / [SOLUCIONADO] Evento alarma reiniciado
« en: Abril 26, 2018, 03:00:15 pm »
Tengo un problema con el evento alarma. Y es que al colisionar un obj_bala con un objeto_enemigo, he escrito que la alarm[0] destruya tras un segundo el obj_enemigo, para que durante ese tiempo aparezca un sprite de la instancia del obj_enemigo destruida. Y funciona bien.
El problema surge cuando antes de que pase ese segundo impacta otra bala reiniciando la cuenta atrás de la alarma.

Pues eso, ¿dónde está el problema y cómo lo soluciono?


Aquí dejo el código:

obj_enemigo:
Alarma[0]:
     instance_destroy();

Colisión con obj_bala:
     alarm[0] = room_speed;
     with other instance_destroy();     //Destrucción del obj_bala

40
Preguntas y respuestas / Re:Objetos solapados
« en: Marzo 17, 2018, 11:45:12 am »
De acuerdo. Todo funciona bien.

Muchas gracias.

41
Preguntas y respuestas / Re:Objetos solapados
« en: Marzo 14, 2018, 11:16:08 am »
Gracias. Ya solucioné ese error.
Pero de todos modos sigue pasando lo mismo, con el código corregido, por supuesto.

No quiero ser molesto, pero por si acaso influye en el error otra parte del código, mostraré todo el código que he escrito para el objeto principal (obj_mov) incluyendo movimiento y colisión vertical:

///Movimiento

key_right   =   keyboard_check(vk_numpad6);
key_left    =   keyboard_check(vk_numpad4);
key_jump    =   keyboard_check(vk_space);

ground      =   place_meeting(x,y+vspeed,obj_ground);
wall        =   place_meeting(x+hspeed,y,obj_wall);


//Movimiento horizontal
if key_right
{   
    if  hspeed < 8
    {
        hspeed += 0.5;
    }
}
if key_right = 0
{
    if hspeed > 0
    {
        hspeed -= 0.5;
    }
}
   
if key_left
{
    if hspeed > -8
    {
        hspeed -= 0.5;
    }
}
if key_left = 0
{
    if hspeed < 0
    {
        hspeed += 0.5
    }
}


//Colisión horizontal

if wall
{
    while(!place_meeting(x+sign(hspeed),y,obj_wall))
    {
        x += sign(hspeed);
    }
    hspeed = 0;
}


//Movimiento y colisión vertical

if (keyboard_check_released(vk_space) and vspeed<0)
{
vspeed = 0;
}


if ground
{
    gravity = 0;
    while(!place_meeting(x,y+sign(vspeed),obj_ground))
    {
        y += sign(vspeed);
    }
    vspeed = 0;
}
else
{
    gravity = 1;
}

if (ground and key_jump)
{
    vspeed = -16;
}

Esto es todo lo que está escrito en el juego.

42
Preguntas y respuestas / [SOLUCIONADO] Objetos solapados
« en: Marzo 13, 2018, 02:13:52 pm »
Hola.

La pregunta es breve. Y es que al moverse el objeto principal hacia un objeto muro (obj_wall), ambos quedan solapados y no puedo mover el objeto principal a ninguno de los lados. ¿Cuál es el problema?

El código de movimiento es este:

key_right   =   keyboard_check(vk_numpad6);
key_left    =   keyboard_check(vk_numpad4);

//Movimiento horizontal
//Derecha
if key_right
{   
    if  hspeed < 8
    {
        hspeed += 0.5;
    }
}
if key_right = 0
{
    if hspeed > 0
    {
        hspeed -= 0.5;
    }
}

//Izquierda   
if key_left
{
    if hspeed > -8
    {
        hspeed -= 0.5;
    }
}
if key_left = 0
{
    if hspeed < 0
    {
        hspeed += 0.5
    }
}


Y aquí el de colisión horizontal:

wall        =   place_meeting(x+hspeed,y,obj_wall);

if wall
{
    while(!place_meeting(x,y+sign(vspeed),obj_wall))
    {
        y += sign(vspeed);
    }
    vspeed = 0;
}
Con este código el juego se cuelga.

E incluso traté de poner uno mucho más simple para el movimiento:

if key_right {hspeed = 8;}
if key_left   {hspeed = 8;}
if key_right and key_left = 0 {hspeed = 0;}

Y para la colisión:

if wall
{
hspeed=0;
}

Pero con este ocurre que aunque no se cuelga, el objeto se queda unido también a la pared.


Las mascaras del sprite principal y el del objeto pared están en automático y preciso.

El cambio de imagen o de sprite no tienen que ver con el problema ya que de momento deje en exclusiva el sprite en parado, el cual solo tiene una imagen.


Como ya pregunté, ¿donde está el problema?


43
Preguntas y respuestas / Re:Saltos precisos
« en: Marzo 09, 2018, 05:08:05 pm »
Gracias por responder.

El salto ya ocurre como buscaba. Aunque hice una modificación al código que mostraste.
Debajo de:

if ground {gravity=0}

Escribí:

while(!place_meeting(x,y+sign(vspeed),obj_wall))
    {
        y += sign(vspeed);
    }
    vspeed = 0;

Solucionando además el pequeño lag que ocurría al cambiar del sprite salto al sprite en el suelo.

El código de colisión con el suelo no fue necesario.

44
Preguntas y respuestas / Saltos precisos
« en: Marzo 08, 2018, 01:50:41 pm »
Hola.

Estoy creando un plataforma de estilo Super Mario Bros. original, de hecho lo estoy intentando imitar al pié de la letra, pero con mi propio código, y tengo dudas con los saltos.

El caso es que no sé como crear un salto, por así decirlo coherente.
 
Por citar los puntos que veo más importantes, busco:
-Que el salto no se detenga hasta que deje de pulsar el botón de salto o hasta que llegue a una determinada altura, p.ej. el doble de la altura del personaje (que creo que es la máxima altura que alcanza Super Mario después de usar un champiñón).
-Y que al comienzo del salto tenga más velocidad vertical y que a medida que vaya avanzando, esta velocidad vaya disminuyendo, primero más sutilmente y de forma más brusca al final.

Básicamente busco las mismas mecánicas que en dicho juego.

De momento este es el código que he escrito para el salto:

//Movimiento vertical

key_jump    =   keyboard_check(vk_space);
ground        =   place_meeting(x,y+vspeed,obj_wall)

if key_jump
{
    if vspeed >= -12
    {
        vspeed -= 0.75;
    }
}
if key_jump = 0
{
    if vspeed <= 16
    {
        vspeed += 1;
    }
    if ground
    {
        vspeed = 0;
    }
}

Con esto el salto queda tosco, no tiene límite vertical positivo, y además el salto comienza lento y aumenta su velocidad con el tiempo, consiguiendo lo contrario de lo que quiero.


Por otro lado tengo un pequeño problema con los sprites. Y es que al cambiar el sprite de salto al sprite en el suelo, hay como cierto retraso desde que el objeto entra en contacto con el suelo, hasta que cambia al sprite adecuado.

Aquí dejo el código que utilicé para el cambio del sprite.

ground      =   place_meeting(x,y+vspeed,obj_wall)
if !ground
{
    sprite_index = spr_salto;   
}


Les agradecería una respuesta explicita a los puntos que he tratado con el tema del salto o que tal vez me recomienden algún tipo de script para la aceleración, o lo que os parezca más adecuado.

Gracias de antemano.

Páginas: 1 2 3