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.

Mensajes - javixblack

1
Preguntas y respuestas / Re:Escaleras en GML
Septiembre 14, 2018, 05:21:22 AM
Cita de: BssString en Septiembre 14, 2018, 04:48:53 AM

Sugerencia: Si pulsas la tecla abajo hasta que tocas el suelo, deberías hacer escalera = false, para que el personaje se baje de la escalera y que no sea sólo con espacio... así es más fácil de controlar para la persona que esté jugando.
Sugerencia2: Noté que tu código no detecta colisiones (no sé si tienes colisión en otro lado), así que lo que puedo ver aquí es que puedes atravezar terreno mientras estás trepando o bajando la escalera, incluso atravezar el suelo.
Sugerencia3: Si bajas o subes de la escalera hasta que dejas de colisionar con ella, no tendrás forma de detectar que ya no estás colisionando y tu variable escalera seguirá siendo "true", creará una inconsistencia. Deberías usar un "place_meeting(x,y,other)" justo después de ajustar el "y" para ver si después de moverte, aún estás tocando la escalera, si ya no, deberías hacer "escalera = false".

Saludos

Funcionó de manera maravillosa. ¡Mil gracias! He notado unos pequeños detalles que sucedes desde la primera vez que intenté hacer una escalera, y es que si estoy cayendo desde un nivel superior y me trepo a mitad de la escalera, el personaje se agarra, pero la vspeed se activa y me lo hace descender, hasta que colisiona con el suelo y se hace cero, permitiéndome trepar con normalidad, por lo que debí establecer "vspeed = 0" cuando "escalera = true".
Dentro de este mismo problema, cuando estoy en caída libre atravieso la escalera (o sea, si estoy cayendo y presiono las teclas de movimiento lateral hasta toparme con la escalera), el personaje se acelera horizontalmente. He dibujado los valores de la "hspeed" en pantalla y cambia de "0" a "0.00" lo que no tiene mucho sentido a decir verdad.

Por último, tu primera sugerencia funcionó de manera exitosa. La segunda no entendí bien a qué te referiste, pues cuando llego abajo de todo, puedo colisionar con el piso y conseguir "escalera = false" para quedarme de pie.

La tercera la implementaré más adelante (quiero intentar animar al personaje al llegar al tope de la escalera, como para ponerse de pie sobre ella).

Ah, me olvidaba. La animación de trepar no se muestra correctamente, ésta consta de 4 subimágenes, pero sólo muestra las dos primeras (es decir, la 0 y la 1). ¿Se debe a que mi sprite de escalera, por ser pequeño y obligarme a juntar uno sobre otro para armar una escalera más larga, la animación se reinicie tras el contacto con cada instancia? ¿Me recomendás hacer una única escalera más larga y ya? Porque no todas las escaleras del juego serán del mismo tamaño :/

Muchas gracias nuevamente
Saludos!
2
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. :)
3
Preguntas y respuestas / Re:¿Qué es move_contact_solid?
Septiembre 14, 2018, 03:32:40 AM
Cita de: Clamud en Septiembre 10, 2018, 12:55:36 AM
Si escribes -1 o 0, maxdist se establece en 1000. Es mejor escribir un número pequeño que sea igual a la máxima velocidad del objeto. Si se usa un número muy grande la función realizará demasiadas iteraciones y ralentizará el juego. De cualquier forma, no es recomendable utilizar las funciones move_contact_* ni move_outside_*.

Che, yo también tengo dudas con esto. Porque en el manual de gamemaker dice que maxdist sólo puede tener dos valores: 0 ó -1. Pero he visto cientos de veces ejemplos que llevaban esa función, en la cuál tenían, por ejemplo, el número 12 o el 6. No entiendo por qué. Incluso he probado en variar ese valor pero no noté cambio alguno.
4
Preguntas y respuestas / Re:Cambiar de animación dos veces
Septiembre 12, 2018, 08:03:14 PM
Cita de: 3dgeminis en Septiembre 12, 2018, 07:38:16 PM
En realidad hiciste que vaya mas lento (0.1) de lo que estaba (0.2) :-[.
Recuerda cambiar la velocidad en TODOS los estados o todos los sprites usaran esa velocidad por defecto.
La solucion es cambiar  if image_index=6  por  if image_index>=6
Dependiendo de la velocidad GM puede saltarse alguna imagen.


Sos un genio!!! Funcionó de diez, entonces el problema de que se repetía el la animación una y otra vez al cambiar la velocidad, es debido a que "si el sprite es el nº 6, cambiar de animación", pero iba tan rápido que, como bien dijiste, se salteaba el sprite nº6, así que si defino "si el sprite es mayor o igual al nº6, cambiar de animación" funciona adecuadamente (lo que es raro, porque después del nº 6 vuelve al cero y no podría haber un valor mayor que ése). Pero gracias por todo, ya puedo dar como resuelto mi problema ^^
5
Preguntas y respuestas / Re:Cambiar de animación dos veces
Septiembre 12, 2018, 03:04:24 PM
Cita de: 3dgeminis en Septiembre 12, 2018, 06:54:11 AM
Si se puede en codigo, subo un ejemplo para no tener que escribir todo aqui :P, solo debes importarlo.

Sos un fenómeno, viejo!!!!!!!! mil gracias :D De esta manera todo se reproduce parejo, sin embargo, quise modificarle el image_speed de las animaciones "spr_agacharse" y "spr_pararse" (porque quiero que se agache y levante relativamente rápido) y no funciona, la animación se repite incesantemente una vez presionada la tecla. (Son las dos líneas de código junto a los comentarios "AGREGUÉ ESTO")

//AGACHARSE////////////////////////////////////////////////////////////////////
if estado="agacharse"
  {
   sprite_index=spr_agacharse
   image_speed = 0.1 //////////AGREGUÉ ESTO
   if image_index=6
     {
      estado="agachado"
      image_index=0
     }
  }
//LEVANTARSE////////////////////////////////////////////////////////////////////
if estado="levantarse"
  {
   sprite_index=spr_levantarse
   image_speed = 0.1 /////////////AGREGUÉ ESTO
   if image_index=6
     {
      estado="parado"
      image_index=0
     }
  }
//PARADO////////////////////////////////////////////////////////////////////
if estado="parado"
  {
   sprite_index=spr_parado
   if keyboard_check(vk_down)
     {
      estado="agacharse"
      image_index=0
     }
  }
//AGACHADO////////////////////////////////////////////////////////////////////
if estado="agachado"
  {
   sprite_index=spr_agachado
   if !keyboard_check(vk_down)
     {
      estado="levantarse"
      image_index=0
     }
  }


Gracias y saludos :)
6
Preguntas y respuestas / Re:Cambiar de animación dos veces
Septiembre 12, 2018, 03:49:54 AM
Cita de: 3dgeminis en Septiembre 11, 2018, 05:09:42 AM
Usar diferentes objetos para diferentes estados es una opcion mas. Me puse a hacer un ejemplo y en unos minutos ya lo tenia hecho.
Si te sirve y te es facil de esa forma hacelo asi(subo un ejemplo).


Acabo de ver tu ejemplo (soy nuevo en la comunidad y no tenía idea de cómo aparecían los archivos adjuntos)
Es precisamente eso lo que quiero lograr, pero quería intentarlo en forma de código para no tener tantos archivos en el árbol de recursos. Te agradecería si leés mi comentario anterior, donde le explico al otro usuario de forma detallada el código que creé, a ver si vos también podés darme una mano con eso :)

Pero si no me queda más remedio, tendré que hacerlo así, con objetos.

Muchas gracias!!!!!!
7
Preguntas y respuestas / Re:Cambiar de animación dos veces
Septiembre 12, 2018, 03:15:02 AM
Cita de: HKaichim en Septiembre 11, 2018, 06:36:13 AM
Yo crearia variables con las "Alarmas"

No estoy seguro de haberte entendido bien, sin embargo, probé con alarmas (lo cual te adelanto desde ya que no me funcionó), pero me dio una idea la cual me ayudó a acercarme bastante. Pero el problema radica en que no puedo controlar la velocidad de la animación del protagonista mientras se está agachando, pese a modificar su image_speed

Los pasos a continuación:

Notá la existencia de las dos animaciones que mencionaré:
spr_prota_agachandose es la animación del protagonista mientras se está agachando
spr_prota_agachado es la animación del personaje ya estando agachado, que durará hasta que no suelte la tecla "abajo"

Primero, en el evento create, definí una variable

agachado = false //que cambiará de estado dependiendo de si esté pulsando o no la tecla de agacharme

Luego, en el evento step, dispuse el código siguiente:

if keyboard_check(vk_down) and agachado == false //si la tecla "abajo" está pulsada y agachado está como "false"

    {
       
        sprite_index = spr_prota_agachandose //cambiará a la animación del personaje agachándose
        image_speed = 0.1 //la animación se moverá con esta velocidad
             
     }

if sprite_index == spr_prota_agachandose //si la animación actual es la del personaje agachándose...

    {
        if image_index == 2 //y si se encuentra en el fotograma "2" (la animación consta de 3 fotogramas, que serían 0, 1, 2
                            //y me interesa el último de todos estos)
            {
                agachado = true //la variable cambiará a true
            }
    }


if agachado == true //finalmente, si agachado es true
    {
        sprite_index = spr_prota_agachado //cambiará al sprite de estar ya agachado, con la animación de respirar
        image_speed = 0.05 //con esta velocidad de animación
    }




En sí, funciona, la animación se ejecuta, pero lo hace demasiado rápido y prácticamente ni se aprecia. Si cambio el "image_speed" de spr_prota_agachandose, no cambia nada, por más lenta que quiera ponerla. ¿Qué estoy haciendo mal?
8
Preguntas y respuestas / Re:view
Septiembre 11, 2018, 01:51:03 AM
Fijate que dentro de la room, en la pestaña "view" esté tildada la opción "enable the use of Views"
9
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