Mostrar Mensajes

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

Temas - javixblack

1
Preguntas y respuestas / Escaleras en GML
Septiembre 14, 2018, 04:20:54 AM
Buenas, gente. Estoy renegando con hacer escaleras.

Estuve navegando en la comunidad en busca de información, descargué unos ejemplos pero la verdad es que las anotaciones que tienen me resultan carentes de ayuda. No son detalladas para ser consideradas un ejemplo. Incluso algunos ejemplos son buenos pero no son precisamente lo que estoy buscando.

Voy a detallar completamente todo, desde el inicio hasta el final, por más sencillo que parezca, dividiendo cada situación en items, y debajo de los cuales planteo mi hipótesis para resolverlo.

1) La escalera va a comenzar desde la altura del piso, pero quiero que el jugador pueda pasarla por delante de ella cuando simplemente esté caminando por alli.

Mi posible solución: Para que el personaje pase por delante de ella, la escalera tendrá que tener mayor profundidad, o sea, la depth. Y no debe estar mercada la casilla "SOLID" por ningún motivo.

----------------------------------------------------------------------------------------------------------------------------------------------

2) Me gustaría lograr es que la condición para treparse a la misma sea que la coordenada X del jugador esté dentro de los límites de la escalera (es decir, entre la X1 (el lateral izquierdo) y X2 (el lateral derecho) de la misma) y que, además, pulse la tecla "arriba" (con pulsarla sólo un instante alcance para que quede trepado y quieto).

Mi posible solución: En el evento CREATE del jugador, creé una variable booleana establecida en false.

escalera = false


Luego, en el evento COLISIÓN CON ESCALERA del jugador, puse un bloque de código con lo siguiente:



///////Hay que aclarar que el sprite de la escalera tiene 15 pixeles de ancho, siendo el nº 8 el centro, por eso lo de sumar y restar 7 a X,
para determinar los laterales izquierdo y derecho de la misma.

if ((obj_escalera.x) - 7) < x < ((obj_escalera.x) + 7) and keyboard_check(vk_up)
    {
        escalera = true
    }
           
       
           
if escalera = true
    {
        x = obj_escalera.x
        sprite_index = spr_prota_escalera     //Sprite del jugador trepado
        image_index = 0
        gravity = 0   
    }
   

if escalera = true and keyboard_check(vk_up)

    {
        y = y-4
        image_speed = 0.1   //Para que comience la animación de trepar (debería detenerse al dejar de pulsar la tecla)
    }


if escalera = true and keyboard_check (vk_down)
    {
        y = y+4
        image_speed = 0.1
    }   


/////////También, para que el jugador se suelte de la escalera, puse:

   
if keyboard_check (vk_space)
    {
        escalera = false
    }



---------------------------------------------------------------------------------------------------------------------------------

3) Ahora lo que falta aclarar es qué sucede cuando la variable ESCALERA está en FALSE. La gravedad entrará en vigencia si el jugador no está en contacto con el piso, activando su respectivo sprite de caída y su velocidad de animación. Si está en contacto con el piso, la gravedad valdrá cero.

if escalera = false
    {
        if place_free(x,y+1)

            {
                gravity = 0.7
                sprite_index = spr_prota_cayendo
                image_speed = 0.3
            }

        else
   
            {
       
                gravity = 0
            }
    }




Pero todo este código me anda mal, cuando subo a una escalera, se teletransporta a otra (supongo que por eso de las prioridades de las instancias, de cuál ubiqué primero en la room). Y la animación de trepado no se reproduce y no sé cuántos más errores tiene.

Espero puedan ayudame. Desde ya, muchas gracias. :)
2
Qué tal, comunidad. Es mi primera vez posteando acá.

Bueno, la cuestión es así: tengo un personaje que, cuando pulso "abajo", éste se agacha. Sin embargo, lo que quiero lograr es que muestre una animación de como se va agachando. Sin embargo, hay un par de cosas a tener en cuenta:

1) El idle (o sea, cuando está parado sin hacer nada) tiene una animación de respirar spr_prota_quieto

2) Tengo una animación de como cambia de estar parado a estar agachado spr_prota_agachandose

3) Una vez agachado, éste tiene una animación de estar respirando. spr_prota_agachado

Es decir, tengo una animación para cada uno de los estados, así que no puedo poner un "image_index" que detenga la animación en el último sprite del personaje agachándose, porque entonces éste no tendría la animación de respirar.

Pensé en crear objetos distintos, y destruir la instancia al terminar la animación de estar agachándose y crear la otra instancia donde el personaje ya se encuentre agachado y respirando. Pero creo que no es la manera más práctica de hacerlo.  ¿Alguna idea? dejo todas mis esperanzas en esta comunidad, que por lo que vi, es buenísima!!

Saludos y gracias de antemano