| В некоторые платформеры крайне необходимо добавить блоки, которые можно двигать. Подразумевается прямой контакт с игроком, т.е. толкание. Мы расмотрим довольно простой пример реализации.
  С чего начать? Давайте для начала создадим землю на которой будут располагаться игрок и сами блоки.
  obj_ground 
 Представляет из себя твердый, видимый обьект. "События" не добавляем.
  Теперь поместим нашего персонажа.   obj_player 
 STEP
   Code gravity_direction=270; // гравитация if place_free(x,y+1)
 gravity = 1;
 else
 gravity = 0;
 
 if keyboard_check(vk_up) {if !place_free(x,y+1){vspeed -= 10;}} // прыжок
 if keyboard_check(vk_left) {if place_free(x-3,y){x-=3}}
 if keyboard_check(vk_right) {if place_free(x+3,y){x+=3}}
 COLLISION with object "obj_ground"    Code if place_free(x,y+vspeed)=false{vspeed=0 move_contact_solid(270,10);} // контакт с землей Остался движимый блок. Твердый, видимый обьект. Родитель: obj_ground (ставим родителя, чтобы блоки не налазили один на другой)
  obj_block 
  STEP    Code if place_free(x,y+1) gravity=1;
 else
 gravity=0;
 
 // Когда игрок подобрался вплотную к блоку и при этом нажата одна из клавиш движения - происходит передвижение оного.
 
 if keyboard_check(vk_right) and place_meeting(x-3,y,obj_player) x+=3; // толкаем блок вправо на 3 пикселя
 if keyboard_check(vk_left) and place_meeting(x+3,y,obj_player) x-=3; // толкаем блок влево на 3 пикселя
 COLLISION with object "obj_ground"    Code if place_free(x,y+vspeed)=false{vspeed=0 move_contact_solid(270,10);} // контакт с землей По желанию - уничтожение игрока если блок упал на голову.   COLLISION with object "obj_player"    Code if vspeed > 0 and y < other.y // если вертикальная скорость больше нуля и персонаж ниже блока. with (other) instance_destroy () // уничтожить игрока
   Примечание:   Поменяв знаки (+/-) в проверках place_meeting - можно заставить персонажа не пихать камень вперед, а тянуть за собой. |