在敌人之间生成延迟

本文关键字:延迟 之间 敌人 | 更新日期: 2023-09-27 18:33:20

我正在XNA中开发一款塔防游戏,我有一个名为Tank的职业,它创建一个敌人,该敌人沿着通过A *找到的地图周围的路线行驶。现在,我可以创建多个 Tank 实例,但它们都会同时生成。这意味着他们沿着路线处于完全相同的位置,使其看起来像只有一个敌人。

这是我加载新波的代码:

if (spawn == true)
{
    maxTanks += 2;
    killsInWave += 2;
    tanks = new Tank[maxTanks];
    for (int i = 0; i < maxTanks; i++)
    {
        tanks[i] = new Tank();
        tanks[i].Initialize(map);
        tanks[i].LoadContent(Content);                                  
    }
    waveNum += 1;
    spawn = false;
}

谁能给我一点帮助,让每个敌人在它和最后一个敌人之间延迟生成?

在敌人之间生成延迟

你需要一个基于时间的生成创建率,类似于这个......

   SpawnUnitsCount = n;
   Units_Per_Second = 5; // 5 Per second
   void Update(float ElapsedSeconds)  // (float) gametime.ElapsedTime.TotalSeconds
   {      
    if (SpawnUnitCount>0)
    {
      CreationRate += Units_per_second * ElapsedSeconds;
      while ( CreationRate >= 1 )
      {
         CreationRate--;
         MakeNewUnit(); 
         SpawnUnitsCount --;
         if (SpawnUnitCount == 0)
         {
            CreationRate = 0; // The wave is finished
         }
      }
    }

我会这样做:

//need to be defined in your loop
int nextTankToCreate(0);
int iterationCount(0);
int CreateTime(500); //create every 500 iteration
iterationCount++;
if (spawn == true && iterationCount >= createTime)
        {
            iterationCount = 0;
            maxTanks += 2;
            killsInWave += 2;
            tanks = new Tank[maxTanks];
            tanks[nextTankToCreate] = new Tank();
            tanks[nextTankToCreate].Initialize(map);
            tanks[nextTankToCreate].LoadContent(Content);                                  
            nextTankToCreate++;
            if (nextTankToCreate == maxTanks)
            {
                nextTankToCreate = 0;
                waveNum += 1;
                spawn = false;
            }
        }

不确定 XNA 特别,但如果您需要执行一些具有间隔的重复操作,您可以使用类似的东西:

        Action addTank = null;
        int interval = 1000; // 1000 milliseconds
        int requiredNumberOfTanks = 10;
        int tanksCreated = 0;
        var timer = new Timer(o => addTank());
        addTank = () =>
                         {
                             CreateTankMethod();  // your method to create tank
                             tanksCreated = tanksCreated + 1;
                             if (tanksCreated < requiredNumberOfTanks)
                                 timer.Change(interval, 0);
                         };
        timer.Change(interval, 0);

此代码将以最有效的方式利用线程。这比Thread.Sleep()好多了

您可能还希望使坦克之间的间隔看起来更加随机。