В некоторые платформеры крайне необходимо добавить блоки, которые можно двигать. Подразумевается прямой контакт с игроком, т.е. толкание. Мы расмотрим довольно простой пример реализации. С чего начать? Давайте для начала создадим землю на которой будут располагаться игрок и сами блоки. 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 - можно заставить персонажа не пихать камень вперед, а тянуть за собой. |