D
DarthTenebris
Guest
Hello everybody,
I am currently working on a 2D platformer, and have run into an issue. The player seems to be getting stuck in walls when walking left, but not when walking right, and I don't have a clue why. Perhaps a fresh set of eyes can help me.
Create Event:
Step Event:
Any help will be appreciated.
Thank you for your time.
I am currently working on a 2D platformer, and have run into an issue. The player seems to be getting stuck in walls when walking left, but not when walking right, and I don't have a clue why. Perhaps a fresh set of eyes can help me.
Create Event:
GML:
keyLeft = ord("A");
keyRight = ord("D");
keyJump = ord("W");
dir = -1; // 1 = left ; 0 = stop ; -1 = right
spr_spsl = spr_player_static_left;
spr_spsr = spr_player_static_right;
spr_spdl = spr_player_dynamic_left;
spr_spdr = spr_player_dynamic_right;
hspd = 0;
vspd = 0;
minHspd = -0.3;
maxHspd = 0.3;
minVspd = -20;
maxVspd = 20;
grav = 0.05;
wspd = 0.3;
jmp = 3;
onGround = false;
GML:
#region Pre-Step Physics
vspd += grav;
hspd = clamp(hspd, minHspd, maxHspd);
vspd = clamp(vspd, minVspd, maxVspd);
x += hspd;
y += vspd;
if (place_meeting(x, y + 1, obj_block)) {
onGround = true;
y -= vspd;
vspd = 0;
} else {
onGround = false;
}
#endregion
#region Input Collection
var _left = keyboard_check(keyLeft);
var _right = keyboard_check(keyRight);
var _jump = keyboard_check_pressed(keyJump);
#endregion
#region Input Processing
if ((_left && _right) || (!_left && !_right)) {
if (dir == 1) {
if (sprite_index != spr_spsl) {
sprite_index = spr_spsl;
}
} else if (dir == -1) {
if (sprite_index != spr_spsr) {
sprite_index = spr_spsr;
}
}
dir = 0;
hspd = 0;
} else if (_left && !_right) {
dir = 1;
if (sprite_index != spr_spdl) {
sprite_index = spr_spdl;
}
if (!place_meeting(x - hspd, y, obj_block)) {
hspd -= wspd;
} else {
x += hspd;
hspd = 0;
}
} else if (!_left && _right) {
dir = -1;
if (sprite_index != spr_spdr) {
sprite_index = spr_spdr;
}
if (!place_meeting(x + hspd, y, obj_block)) {
hspd += wspd;
} else {
x -= hspd;
hspd = 0;
}
}
if (_jump) {
if (onGround) {
vspd -= jmp;
}
}
#endregion
Thank you for your time.