Всем привет. Помогите, кому не сложно)) Проблема в чём, гейммейкер 2 с сайта. Есть у меня персонаж, в магазине покупается питомец, который атакует всех врагов, если до них можно добраться и дистанция до 300 к примеру. Враги собраны в родительский объект. в отдельном объекте(видимый . постоянный) в шаге
var enemy_sprites = [sp_pet_right1, sp_pet_up1, sp_pet_left1, sp_pet_down1]; sprite_index = enemy_sprites[((direction + 45) % 360) div 90]; image_alpha=0.5;
if instance_exists(ob_pers) { if instance_exists(Ob_enemys){
path = path_add();
if mp_grid_path(ob_grid.grid, path, x, y, Ob_enemys.x, Ob_enemys.y, 1) dist = point_distance(x, y, Ob_enemys.x, Ob_enemys.y); { if (dist<300){ path_start(path, 5, 3, 0); }else { path_end() mp_potential_step(ob_pers.x, ob_pers.y, global.spp, false); } } } }
Проблема в том, что если я в комнату добавляю новые объекты врага, то к ним уже путь не строится. Если перехожу в новую комнату, тоже не строится. и питомец просто следует за персонажем. что делать, как быть?????
Добавлено (29 Февраля 2024, 12:52) --------------------------------------------- Неужели никто из умелых не знает решения?
Меня немного напрягает построение сетки в каждом шаге. Не происходит ли здесь обнуления, из-за которого питомец не может установить путь по сетке, которой уже нет с прошлого шага? Лучше - быть, чем - казаться. P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
так я жеж сетку в шаге строю, чтобы она постоянно пути перестраивала на возможность прохождения. пробовал в крейте делать, на других румах криво работает. нашёл вроде решение проблемы, чтобы на всех врагов нападал, только вот дистанция нападения небольшая. ИИ помог) вот решение которое нашлось :
if instance_exists(ob_pers) { var closestEnemy = noone; // Инициализация переменной для хранения ближайшего врага var closestDist = -1; // Инициализация переменной для хранения расстояния до ближайшего врага
// Перебор всех объектов типа Ob_enemys with(Ob_enemys) { if(instance_exists(id)) { var dist = point_distance(x, y, other.x, other.y); // Расстояние до текущего врага if(closestDist == -1 || dist < closestDist) { closestDist = dist; // Обновление ближайшего расстояния closestEnemy = id; // Обновление ближайшего врага } } }
Добавлено (29 Февраля 2024, 20:45) --------------------------------------------- пробовал дистанцию увеличить, closestDist = dist; // Обновление ближайшего расстояния в этой строке, ставил+=. помогло, но почему то в следующих румах не нападает вообще
Добавлено (29 Февраля 2024, 20:54) ---------------------------------------------
ЦитатаGranner ()
Меня немного напрягает построение сетки в каждом шаге. Не происходит ли здесь обнуления, из-за которого питомец не может установить путь по сетке, которой уже нет с прошлого шага?
дело ещё в том, что я толком не понимаю, недавно начал изучать вот это вот всё)
Добавлено (02 Марта 2024, 21:51) --------------------------------------------- Если кто знает как лучше и правильнее будет, буду благодарен за код!)) желательно с подробными комментариями)