Buenas dias/noches. bueno es que estoy haciendo un engine, no un juego de plataformas, pero me he atorado con el wallJump y el salto gradual, en mi engine uso unos codigos de colisiones perfectas tanto el movimiento como lo gravedad, pero el wallJump y el salto gradual simplemente no me salen.
El codigo que uso para el wallJump es:
//WallJump
if (Jump)
{
if (Right and !Left and !place_free(x + 1, y) and wallJump = 1)
{
canMove = 0;
alarm[0] = 10;
wallJump = -1
vspd = -velSalto;
}
if (Left and !Right and !place_free(x - 1, y) and wallJump = -1)
{
canMove = 0;
alarm[0] = 10
wallJump = 1;
vspd = -velSalto;
}
}
if (canMove = 0)
{
if (dir = 0) { hspd = spd * 2; }
if (dir = 1) { hspd = -spd * 2; }
}
y el codigo del salto gradual:
if (keyboard_check_released(ord('X')) and vspd > 0) { vspd += abs(vspd / 1.5); }
Dejo el engine para que vean como es el codigo, casi todo lo tengo en step menos las variables.
EDITO: uso el :GM8: para poder editar sin tener que estar obligado a guardar como en el :GMS:
Primero no se que es un engine comparado con un juego es extraño decir eso pero que sepa yo engine es (motor) para hacer videojuegos en este caso o algo parecido, bueno volviendo al caso viendo que despues de que le heche un buen vistazo a ese codigo no entiendo cual es el problema la unica manera de que tengas problemas es que estas direccionando mal la variable dir, te explico al final de tu codigo cumples una condicion en la cual en este no veo cual cambia tienes algun movimiento en donde cambies con las keys de movimiento ( teclas ) la variable dir ejemplo: if key_left then dir = 0; if key_right then dir = 1 el key_left y key_right es solo un comprobador tipo variable temporal no es una funcion que quede claro
bueno tendria que checar todo tu codigo pero ya eso es tu decision por cierto la variable walljump no la uses ya que al tocar suelo a que pared vas a ir, pero si la quieres usar sincronizalo de esta forma antes de ese codigo que tienes
if !place_free(x,y+1)
{
if dir = 0 then walljump = 1
if dir = 1 then walljump = -1
// claro siempre y cuando el dir 0 sea a la derecha si no es mirando a la derecha solo invierte el 0 y el 1
}
para el salto gradual esta fallando porque tu estas comprobando si vspd > 0, queriendo decir que compruebas si la velocidad esta hacia abajo ya que ( -y ) es hacia arriba e ( y ) es hacia abajo solo invierte el mayor por un menor "<" ya me entiendes espero que te sirva suerte!
;) :P :P :P :P :P
Cita de: Goganpis en Mayo 27, 2018, 11:09:16 PM
bueno tendria que checar todo tu codigo pero ya eso es tu decision por cierto la variable walljump no la uses ya que al tocar suelo a que pared vas a ir, pero si la quieres usar sincronizalo de esta forma antes de ese codigo que tienes
Gracias por contestar, claro puedes revisar el codigo, estoy dispuesto a recibir criticas constructivas y destructivas, el salto gradual ya quedo gracias ;), pero el wallJump no me sale, la velocidad del room esta en 60 si quieres cambiarlo para debuggear
Use la velocidad de la room en 30 asi que la mayoria del codigo lo adapte a esa velocidad ya que hiba muy rapido y en 30 se ve bien bueno modifique la mayor parte el mismo proyecto esta adjunto intenta leerlo y adaptarlo a tu proyecto ya que te liara mucho porque no configure el salto gradual se me olvido y casi no tengo tiempo ademas de que borre otros codigos que no sirven para ello
Muchas gracias ya quedo, el salto gradual ya lo solucione, y si queda mejor a la velocidad a 30, en el codigo del salto lo modifique para que se pudiera hacer el doble salto quedando asi:
//Salto
if (!place_free(x, y + 1))
{
canMove = 1
if (saltos = 0)
{
if (Jump)
{
vspd = -velSalto;
if (dir = 0)
{
wallJump = 1
}
else if (dir = 1)
{
wallJump = -1
}
}
}
}
//Segundo salto
else
{
if (saltos = 0) { saltos = 1; }
if (saltos = 1)
{
if (Jump)
{
vspd = -velSalto;
if (dir = 0)
{
wallJump = 1
}
else if (dir = 1)
{
wallJump = -1
}
saltos = 2;
}
}
}
Muchas gracias!
Tranquilo :D