我创造了围绕游戏追逐玩家的敌人,但是存在问题。当敌人靠近玩家时,敌人过于完美并迅速聚合在一起。这是因为他们每次游戏更新时都会朝着玩家的方向前进。追逐玩家时,AI的敌人聚集在彼此之间
我想介绍一些随机性进入敌人,可能与运动的角度。这是我迄今为止(我还没有优化它,因为它是尚未完成,所以我知道高开销):
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);
}
}
}
如果每个敌人都是独立的并且无法进入任何其他敌人的阵地,那么该怎么办? – annonymously 2012-01-10 09:31:53
他们为什么没有访问权限?你应该能够让他们访问这些数据....也许通过一个“findNearbyUnits()”方法来搜索周围的地图区域。 – mikera 2012-01-10 09:42:28
我现在决定在更新方法中传递一个对敌人列表的引用,并计算它们之间的角度,然后创建一个力量将它们分开,如果它们太靠近 – annonymously 2012-01-10 09:45:28