Ответ на викторину

В игровом движке метод Update() вызывается каждый кадр. В какой ситуации следующий код приведет к катастрофическому падению FPS (фризу) или зависанию игры на несколько секунд?

// Псевдокод на C# (Unity-style)
void Update() {
if (Input.GetKeyDown(KeyCode.Space)) {
List allEnemies = FindAllObjectsOfType();
foreach (Enemy e in allEnemies) {
while (Vector3.Distance(Player.Position, e.Position) < 100f) {
e.MoveTowardsPlayer(1f);
}
}
}
}

Правильный ответ: Бесконечный цикл while, так как дистанция до игрока может не уменьшиться или условие выхода неверное, что намертво повесит игру.

Условие while (Distance < 100f) не гарантирует, что MoveTowardsPlayer сократит дистанцию до значения ниже 100 (например, если моб застрял в стене или движется слишком медленно). Если дистанция никогда не станет меньше 100, цикл станет бесконечным. Игровой поток (Main Thread) зависнет намертво, так как Update() не завершится. Это Hard Lock, а не просто просадка FPS.