Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Binario YT en Noviembre 12, 2018, 11:58:34 AM

Título: Ejecutar UNA sola vez
Publicado por: Binario YT en Noviembre 12, 2018, 11:58:34 AM
como hago para hacer que  una linea de código se ejecute una vez sola,por que quiero hacer un sistema de salton en :GM8: y siempre se ejecuta mas de 1 vez aqui les dejo el código:
vecesSalto =+1
if vecesSalto <=1 vspeed =-10
if place_free(x,y+1) vecesSalto =-1     

Alguien tiene alguna solucion?
Título: Re:Ejecutar UNA sola vez
Publicado por: BssString en Noviembre 12, 2018, 12:11:30 PM
Hola Binario YT

Asumo que ese código está en step, en ese caso, usa la función "keyboard_check_pressed" en vez de "keyboard_check", así sólo detectas la primera pulsación de la tecla
Ej:
if keyboard_check_pressed(vk_space)
&& place_meeting(x,y+1,obj_suelo) {
Ejecuta el salto acá
}


Saludos
Título: Re:Ejecutar UNA sola vez
Publicado por: Binario YT en Noviembre 12, 2018, 12:27:47 PM
En realidad esta en el evento keyboard chek
Título: Re:Ejecutar UNA sola vez
Publicado por: Ashe de Freljord en Noviembre 12, 2018, 12:55:25 PM
vecesSalto = vecesSalto+1
if vecesSalto <=1 vspeed =-10
if place_free(x,y+1) vecesSalto = vecesSalto-1     
Título: Re:Ejecutar UNA sola vez
Publicado por: kostra en Noviembre 12, 2018, 01:16:31 PM
Pues cambia el evento en keyboard check pressed xd
Título: Re:Ejecutar UNA sola vez
Publicado por: Binario YT en Noviembre 13, 2018, 12:22:31 PM
Me equivoque al escribir el problema,lo que sucede es que el salto se ejecuta en el aire en  :GM8: lo siento :'(
Título: Re:Ejecutar UNA sola vez
Publicado por: BssString en Noviembre 13, 2018, 12:28:06 PM
En ese caso revisa que estés tocando el suelo antes de cambiar la vspeed con la función:
if place_meeting(x, y+1, obj_suelo)
Reemplaza "obj_suelo" por el objeto que uses de muro.

Saludos
Título: Re:Ejecutar UNA sola vez
Publicado por: kostra en Noviembre 13, 2018, 02:06:34 PM
Si tu suelo es solido tambien sirve if !place_free(x,y+1)
Título: Re:Ejecutar UNA sola vez
Publicado por: dixon2010 en Noviembre 13, 2018, 03:31:58 PM
Hola a todos me encantaron sus respuestas son maravillosas.

El salto en plataformas presenta muchos obstáculos.

1. Al caer no debe trabarse en el suelo
2. Al saltar no debe trabarse con el techo. (esto es muy importante)
3. Al saltar debe tocar el techo y al caer debe tocar el suelo. Según la precisión que se requiera. (habeces se requiere que la distancia con el techo se disminuya a cero). Esto es precisión.
4.Si el player tiene un bloque en la cabeza o está entrando en un lugar muy pequeño, no debe saltar.
5. Al estar en el aire no debe volver a saltar según el caso, a menos que quieras hacer un double jum tipo castlevania circle of moon
(https://image.ibb.co/nibq9f/double-jump.png) (https://imgbb.com/)

El código para saltar , caer bien y no trabarse en el techo es este:
[EVENT CREATE]:
b2=0; s=0;
[EVENTO STEP] Y/O [DRAW] según el caso.
////version 1 movimiento vertical con gravedad y salto
//requiere en el [EVENT CREATE]: b2=0; s=0;
//movimiento vertical con salto.
b2p=(b2=0)*keyboard_check(38)
b2=keyboard_check(38)
if(b2p*(s=0)*place_meeting(x,y+10,object1))s=20
if(s)s-=1+place_meeting(x,y-1,object1)*2
if(s<0)s=0
vs=10-s
while(place_meeting(x,y+vs,object1))vs-=1*sign(vs)
y+=vs


compatibilidad: (https://image.ibb.co/dSScN0/compatibilidad.png) (https://imgbb.com/)
modo de uso:
en vs=10-s cambias el numero 10 por la gravedad que se requiera.
en if(b2p*(s=0)*place_meeting(x,y+10,object1))s=20 cambias s=20 por el valor que le quieras dar al salto

Ahora, pues existe otra dificultad. Supongamos que quieres crear una plataforma con colinas e inclinaciones como mario bros 3:
(https://image.ibb.co/c7eSpf/colina.png) (https://imgbb.com/)

Pues vas a necesitar otro código si quieres que las coliciones sean precisas, para esto se requiere una combinación de codigos donde según el estado del jugador se decide que código usar.