Этот урок больше подходит для игр с верху. Начнём! Сначала создаём игрока , ещё нам понадобиться объект NPC и объект блока который наш герой будит опходить НЕЗАБУДТЕ ПОСТАВИТЬ СПРАЙТЫ ДЛЯ ВСЕХ ОБЪЕКТОВ! Для начала надо решить ,что должен делать наш враг.Было бы глупоа если враг постоянно преследовал нашего героя.Поэтому наш враг будет преследывать его только когда видит. Теперь нам понадобиться функция collision_line (! collision_line(x1, y1, x2, y2, obj, prec, notme) – функция проверяет, есть ли столкновение между линией сегмента из (x1, y1), в (x2, y2) и объектами obj. Вы можете использовать её для проверки - может ли образец объекта видеть другой образец объекта, заодно проверяя, пролегает ли линия сегмента между стеной!) Теперь мы ведём дополнительную переменную Sight(Введение переменной будет полезно если у нас будет много врагов) Для этого в событие Create каждого героя мы запишем следующее:
Sight=100*random(5); Gotoplayer=0;
Вторая переменная Gotoplayer говорит за себя: если поставить эту переменную равной 1 то враг будет идти за игроком с самого начала игры, независимо от того видит он его или нет. Теперь нужно записать следующее в событие Step:
If distance_to_object(obj_player) < sight { If collision_line(x, y, obj_player.x, obj_player.y, obj_block, 0, 0) { Gotoplayer=1 }
Кстати, этот кусок кода можно записать иначе. Например, так:
If (distance_to_object(obj_player) < sight) and (collision_line(x, y, obj_player.x, obj_player.y, obj_block, 0, 0)) { Gotoplayer=1 }
Напишем следующее в событии Step ниже предыдущего куска кода:
If Gotoplayer=1 { direction=point_direction(x, y, obj_player.x, obj_player.y) mp_potential_step(obj_player.x, obj_player.y, 4, 0) }
P.S Если скорость врага покажется слишком высокой, то можно заменить цифру 4 в функции mp_potential_speed на меньшую.