Tengo el problema de que al empezar el juego mi personaje se mueve automaticamente a la derecha y aunque presione la izquierda no frena, encontre una forma de solucionarlo pero al hacerlo mi personaje se queda enganchado en las paredes y ya no se puede mover.Esto lo hice con la ayuda de unos videos tutoriales(que todavia me falta por terminar la lista de reproduccion) pero no encuentro solucion por ningun lado, soy nuevo en todo esto xd no se casi nada de programacion.
Adjunto el codigo
///Desplazamiento
var keyLeft, keyRight, keyJump, keyJumpRelease;
keyLeft = -keyboard_check(vk_left);
keyRight = keyboard_check(vk_right);
keyJump = keyboard_check_pressed(vk_up);
keyJumpRelease = keyboard_check_released(vk_up);
//Comprobacion de colisiones
intColLeft = place_meeting(x - 1, y, obj_block);
intColRight = place_meeting(x + 1, y, obj_block);
bolGround = place_meeting (x, y + 1, obj_block);
intMove = keyLeft + keyRight;
//Definir aceleración y fricción en funcion del medio
if (!bolGround)
{
intTempAcc = intAirAcc;
intTempFric = intAirFric;
}
else
{
intTempAcc = intGroundAcc;
intTempFric = intGroundFric;
}
//Velocidad horizontal
if (intMove != 0) intVX = scrApproach(intVX, intVXMax + intMove, intTempAcc);
else intVX = scrApproach(intVX, intVXMax + intMove, intTempFric);
//Velocidad vertical
if (!bolGround)
{
intVY = scrApproach (intVY, intVYMax, intGravityNorm); //Caida libre
}
//Salto
if (keyJump && bolGround) intVY = -intVYMax;
//Colision horizontal
repeat(abs(intVX))
{
if (!place_meeting(x + sign(intVX), y, obj_block))
{
x += sign(intVX)
}
else
{
intVX = 0;
break;
}
}
//Colisión vertical
repeat(abs(intVY))
{
if (place_meeting(x, y + sign(intVY), obj_block))
{
intVY = 0;
break;
}
else y += sign(intVY);
}
Hola Crashed_ yo vi esos tutoriales hace ya algun tiempo y el error que tienes esta en el scipt aproach que no lo pusiste en tu comentario.
Ese script debe ser asi:
[gml]///Script Aproach
if (argument0 < argument1)
return min(argument0 + argument2, argument1);
else
return max(argument0 - argument2, argument1);[/gml]
Hola.
Tu problema está en que estás sumando la variable intMove.
[gml]
//Velocidad horizontal
if (intMove != 0) intVX = scrApproach(intVX, intVXMax + intMove, intTempAcc);
else intVX = scrApproach(intVX, intVXMax + intMove, intTempFric);
[/gml]
Eso produce que tu personaje se mueva a velocidad máxima sin tomar en cuenta el valor de intMove, me explico mejor:
Si por ejemplo tienes una velocidad máxima de 4, el objeto comienza a moverse a velocidad base de cuatro más el valor de intMove, que puede ser 1, 0 o -1, por lo que siempre devolverá um resultado mayor a 0, en cambio al multiplicar, invierte el signo y si no presionas ninguna tecla lo deja en cero.
Inténtalo así:
[gml]
if (intMove != 0) intVX = scrApproach(intVX, intVXMax * intMove, intTempAcc);
else intVX = scrApproach(intVX, intVXMax * intMove, intTempFric);
[/gml]
Espero te sirva, hasta luego.