Buenas compañeros, mi problema es que al presionar la tecla de saltar (space) cuando lo hago con:

Keyboard: El personaje sigue subiendo mientras mantengo presionado 'space'.

Y cuando lo hago con:

Key_Press: El personaje sigue saltando cuando estando en el aire presiono 'space', y así voy presionando y presionando 'space' en el aire y sigue subiendo.

¿Cómo puedo hacer para que solo funcione la tecla 'saltar' cuando solo se colisione con el sólido 'suelo'?

EVENT KEY_PRESS (Space)
[gml]
if place_free(x,y + -1)
    {
    vspeed= -6
    }
[/gml]

:-\ :-\ :-\

Hola Luis En! Podrías intentar esto:

En el evento keyboard:
if (place_meeting(x, y+1, [objeto] )) { vspeed = -6; }

Espero que te sirva! :D

#2 Agosto 12, 2018, 06:39:07 AM Ultima modificación: Agosto 12, 2018, 06:41:37 AM por Luis En
Cita de: Hezz en Agosto 11, 2018, 04:47:44 PM
Hola Luis En! Podrías intentar esto:

En el evento keyboard:
if (place_meeting(x, y+1, [objeto] )) { vspeed = -6; }

Espero que te sirva! :D

Geniaaaaal!!! Graciassss!!! me sirvió perfectamente!! :D
Ese código que me pasaste es para que reconozca la tecla "saltar" solo cuando toque el sólido "piso" verdad? y ¿cómo haría para que funcione para cada objeto solido? tendría que escribir un código para cada objeto solido? o una máscara para todos los objetos sólidos? :o o también podría utilizar el "Parent" no? hacer hijos del objeto "piso" a todos los otros objetos.

La forma en la que yo lo hago es creando una variable nueva y sumando a todos los objetos que quiero detectar, y luego hacer un sign al resultado.
var suma;
suma = sign(place_meeting(x, y+1, [objeto1] ) + place_meeting(x, y+1, [objeto2] ) + place_meeting(x, y+1, [objeto3] ))


Entonces, si detecta alguno de los objetos la variable es 1 o más, con el sign es 1, y 1 es lo mismo que true, entonces:
if (suma) { vspeed = -6; }

Cita de: Hezz en Agosto 12, 2018, 07:10:42 AM
La forma en la que yo lo hago es creando una variable nueva y sumando a todos los objetos que quiero detectar, y luego hacer un sign al resultado.
var suma;
suma = sign(place_meeting(x, y+1, [objeto1] ) + place_meeting(x, y+1, [objeto2] ) + place_meeting(x, y+1, [objeto3] ))


Entonces, si detecta alguno de los objetos la variable es 1 o más, con el sign es 1, y 1 es lo mismo que true, entonces:
if (suma) { vspeed = -6; }

Aja! con una variable, genial!! Con las variables todo es más práctico no? y dime, esa es una variable local o de instancia? Y eso en que EVENT lo colocaría? COLLISION? o CREATE del personaje principal? Y que significa "Sign"?
Disculpa si soy muy preguntón! xD es que quiero que me quedé bien claro! Y gracias por responderrrr!! :D

La declaración de la variable la haces con la funcion var en el evento step. Esa variable no se guarda y se elimina después de ejecutarse el código en el evento que hiciste. No se puede acceder desde otro objeto, y son prácticas para no ocupar memoria RAM. Podés declarar una variable desde el evento create, ya que es lo mismo, porque en el evento step va a estar constantemente creándose con la función.

La función sign lo que hace es tomar un valor "x" y devolver su signo. Ejemplo:
sign(-48); <== -1
sign(72); <== 1
sign(0); <== 0

Preguntá lo que quieras, ya que para eso es el foro. Uno no nace sabiendo XD

Cita de: Hezz en Agosto 12, 2018, 07:32:09 AM
La declaración de la variable la haces con la funcion var en el evento step. Esa variable no se guarda y se elimina después de ejecutarse el código en el evento que hiciste. No se puede acceder desde otro objeto, y son prácticas para no ocupar memoria RAM. Podés declarar una variable desde el evento create, ya que es lo mismo, porque en el evento step va a estar constantemente creándose con la función.

La función sign lo que hace es tomar un valor "x" y devolver su signo. Ejemplo:
sign(-48); <== -1
sign(72); <== 1
sign(0); <== 0

Preguntá lo que quieras, ya que para eso es el foro. Uno no nace sabiendo XD

Ajam! lo que aún no entiendo es lo del "sign", como es eso de "devolver su signo"? el signo de x que devolvería sería 0?
y tampoco entiendo lo del <== -1, etc
Si, gracias!! voy a preguntar todo lo que pueda, espero que me contesten tambien xD
Mil gracias por molestarte en contestar bro  :-[

Sign toma un valor y devuelve si es positivo, negativo o cero.
sign(-48); devuelve -1
sign(72); devuelve 1
sign(0); devuelve 0

Por ejemplo:
var numero, resultado;
numero = -5;
resultado = numero * sign(numero);


Quedaría:
resultado = -5 * sign(-5);
resultado = -5 * -1;
resultado = 5;


sign significa signo.