Я создал врагов, которые преследуют игрока вокруг игры, но есть проблема.Враги слишком совершенны и быстро сходятся друг с другом, когда приближаются к игроку.Это потому, что они просто двигаются в направлении игрока при каждом обновлении игры.
Я хотел бы внести некоторую случайность во врагов, возможно, с углом движения.Это то, что я до сих пор (я не оптимизировал это, поскольку это еще не сделано, поэтому я знаю о высоких накладных расходах):
Angle = (float)Math.Atan2((HeroPosition - Position).Y, (HeroPosition - Position).X)// Positions are Vector2s
GlobalForce Propellant = new GlobalForce((float)Math.Cos(Angle) / 2, (float)Math.Sin(Angle) / 2);
ApplyForce(Propellant);
Если я пытаюсь добавить случайное число кЕсть несколько проблем:
Все они обновляются так быстро, что друг за другом время посева одинаково для всех них
Случайное число в каждом обновлении настолько отличается, что угол врага скачет по кругу.
Итак, я хочу знать, как большинство игр решают эту проблему?Как я должен заставить врагов идти разными путями (не имея доступа к списку других врагов)?
РЕДАКТИРОВАТЬ:
Этот код я использую после приведенных ниже рекомендаций для будущих прохожих по:
Angle = (float)Math.Atan2((HeroPosition - Position).Y, (HeroPosition - Position).X);
GlobalForce Propellant = new GlobalForce((float)Math.Cos(Angle) / 2, (float)Math.Sin(Angle) / 2);
ApplyForce(Propellant);
foreach (Enemy e in OtherEnemies)
{
if (e != this)
{
if ((e.Position - Position).Length() < 64)
{
float angleBetween = MathHelper.TwoPi-(float)Math.Atan2((e.Position-Position).Y, (e.Position-Position).X);
GlobalForce avoidance = new GlobalForce((float)Math.Cos(angleBetween)*2, (float)Math.Sin(angleBetween)*2);
ApplyForce(avoidance);
}
}
}