2012-05-07 3 views
1

나는 XNA에서 타워 방어 게임을하고 있으며, A *를 통해 발견 된지도 주변의 경로를 따라 적을 생성하는 Tank라는 클래스가 있습니다. 지금 당장 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; 
} 

사람이 나에게 그와 마지막 사이에 지연 각 적 산란을 약간의 도움을 줄 수 있습니까?

+0

지연시키기 쉬운 방법은'Thread.Sleep (int milliseconds)'이지만, XNA 컨텍스트에서 더 적합한 것이있을 수 있습니다. – phg

+2

아마 게임 쓰레드 인 phg를 자고 싶지 않을 것입니다.) – Joey

답변

1

당신은 시간을 기반으로 스폰 생성 비율이 비슷한 ...

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 
     } 
     } 
    } 
0

내가 그런 식으로 할 것이 필요 XNA의 particulary에 대한

//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; 
      } 
     } 
+0

3 개의 첫번째'int'를 정적 함수로 정의합니다. –

0

확실하지,하지만 경우 당신은 다음과 같은 것을 사용할 수있는 반복적 인 동작을 실행할 필요가 있습니다 :

 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()

당신은 또한 탱크 사이 간격을 더 무작위로 보이고 싶을 수도있다.

+0

Xna는 프레임 간의 경과 시간을 제공하는 루프 게임을 제공합니다 ...이 솔루션은 괜찮지 만이 시나리오에 이상적은 아닙니다. – Blau