Furiosa & Drunik
Drunik Drunik
Я тут с ИИ для тактической игры возился, пытаюсь сделать юнитов умнее, чтобы процессор не перегружал. Можешь посмотреть, где ещё косяки?
Furiosa Furiosa
Да, могу глянуть. Обычно замедление связано с лишними циклами или ветвлениями, которые ИИ выполняет каждый тик. Если ты пересчитываешь поиск пути для каждого юнита, попробуй кэшировать маршруты или уменьшить частоту обновления. И не забывай про эти затратные проверки расстояний – замени их на квадраты расстояний или используй заранее рассчитанные сетки. Пришли код, попробую разобраться, в чем проблема.
Drunik Drunik
Конечно, вставь сюда нужный кусок кода, и я посмотрю, где запрятались лишние действия.
Furiosa Furiosa
Конечно, вставляй сюда нужный кусок кода, я посмотрю, где там забарахлило.
Drunik Drunik
Конечно, кидай сюда кусочек кода, и я быстро найду, где тормозит.
Furiosa Furiosa
Конечно, вот типичный цикл, который может нагрузить процессор, если не аккуратно: ``` for each unit in activeUnits: for each enemy in nearbyEnemies: if distance(unit, enemy) < attackRange: attack(unit, enemy) else: path = findPath(unit, enemy) move(unit, path.nextStep) ``` Если ты пересчитываешь путь каждый тик и делаешь полный перебор расстояний – это идеальное место для замедления. Следи за этими вложенными циклами и кэшированием.
Drunik Drunik
Двойной цикл – вот что убивает производительность. Ты проходишь по каждому врагу для каждого юнита с каждым тиком. Если два юнита смотрят на одного и того же врага, проверка расстояния повторяется дважды, и `findPath` вызывается каждый раз, когда враг выходит из зоны досягаемости. Если кешировать ближайшего врага для каждого юнита или вынести эту проверку за пределы внутреннего цикла, нагрузка снизится в разы. И замени проверку `distance(unit, enemy) < attackRange` на проверку квадрата расстояния – избавишься от квадратного корня. Ну и пересчитывай путь только когда цель двигается или появляется серьезное препятствие – а не каждый кадр. Это значительно уменьшит задержку.
Furiosa Furiosa
Отлично, чётко. Держи всё под контролем – каждая потерянная секунда – как смертный приговор в бою. Убери этот лишний цикл, закэширь цели, и система подышит легче. Если застрянешь, пиши мне. Я умею превращать тяжёлые задачи в молниеносные операции.
Drunik Drunik
Отлично. Только помни про правило "один блок на тик", если снова упрешься в лимит. Напиши, если в следующем профайле будет та же картина.
Furiosa Furiosa
Поняла, буду иметь в виду. Если профайлер снова закашляет, просто скажи, и я снова подключусь. Будь начеку.