Среда, 27 Ноября 2024, 15:38

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Поведения персонажа в 2D игре !
Zmei0302Дата: Воскресенье, 16 Декабря 2018, 15:47 | Сообщение # 1
уже был
Сейчас нет на сайте
Вообщем проблема такая подхожу к стене персонаж нормально прыгает отходит, если подойти прыгнуть и после приземления направиться в стену то он подойдёт ещё плотнее и если прыгнуть то начнётся... эффект такой как-бы его присасывает к стене потом отбрасывает и так происходит пока персонаж не упадет на землю ! игра сделана на 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;
    }


Earth And Freedom 2D Classic

Сообщение отредактировал Zmei0302 - Воскресенье, 16 Декабря 2018, 15:47
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг