Вообщем проблема такая подхожу к стене персонаж нормально прыгает отходит, если подойти прыгнуть и после приземления направиться в стену то он подойдёт ещё плотнее и если прыгнуть то начнётся... эффект такой как-бы его присасывает к стене потом отбрасывает и так происходит пока персонаж не упадет на землю ! игра сделана на Game Maker Studio 2, вся физика прописана кодом всё кодом, раньше токого не было что-то произошло и оно появилось !
Код
Вот код физики персонажа:
//Клавиши управления героем
key_left = keyboard_check(vk_left) || keyboard_check(ord("A"));
key_right = keyboard_check(vk_right) || keyboard_check(ord("D"));
key_jump = keyboard_check(vk_up) || keyboard_check(ord("W"));
if (key_left) || (key_right) || (key_jump)
{
controller = 0;
}
if (abs(gamepad_axis_value(0,gp_axislh)) > 0.2)
{
key_left = abs(min(gamepad_axis_value(0,gp_axislh),0));
key_right = max(gamepad_axis_value(0,gp_axislh), 0);
controller = 1;
}
if (gamepad_button_check_pressed(0,gp_face1))
{
key_jump = 1;
controller = 1;
}
//calculate movement
var move = key_right - key_left;
hsp = move * walksp;
vsp = vsp + grv;
//jumping
canjump -= 1;
if (canjump > 0) && (key_jump)
{
vsp = -7;
canjump = 0;
}
//Horizontal collision
if (place_meeting(x+hsp,y,oWall))
{
while (!place_meeting(x+sign(hsp),y,oWall))
{
x = x + sign(hsp);
}
hsp = 0;
}
x = x + hsp;
//Vertical collision
if (place_meeting(x,y+vsp,oWall))
{
while (!place_meeting(x,y+sign(vsp),oWall))
{
y = y + sign(vsp);
}
vsp = 0;
}
y = y + vsp;
//animation
if (!place_meeting(x,y+1,oWall))
{
sprite_index = sPlayerA;
image_speed = 0;
if (sign(vsp) > 0) image_index = 1; else image_index = 0;
}
else
{
canjump = 10;
if (sprite_index == sPlayerA)
{
audio_sound_pitch(snLanding,choose(0.8,1.0,1.2));
audio_play_sound(snLanding,4,false);
}
image_speed = 1;
if (hsp == 0)
{
sprite_index = sPlayer01;
}
else
{
sprite_index = sPlayerR;
}