2012-04-20 1 views
0

나는 미사일 전용 클래스를 추가했다. 코드는 다음과 같습니다 :침입자가 쏴서 얻는 방법

class Missile 
    { 
     Vector2 Position; 

     public Missile(int XInitialPos, int YInitialPos) 
     { 
      Position = new Vector2(XInitialPos, YInitialPos); 
     } 

     public void Move() 
     { 
      Position.Y = Position.Y - 8; 
     } 
     public void MoveMissile() 
     { 
      Position.Y = Position.Y + 8; 
     } 

     public Vector2 GetPosition() 
     { 
      return Position; 
     } 

}

내가 그러나, 나는 침략자 촬영하게 무작위로 뭔가를 호출하는 방법을 모른다, 런처 촬영을 할 수있는 이동 메서드를 호출하는 방법을 알고있다. 어떤 도움을 주시면 감사하겠습니다. 고맙습니다.

code which invokes launcher to shoot in the update method: 
if (MissileFired != null && MissileFired.GetPosition().Y < 20) MissileFired = null; 

      if (Keyboard.GetState().IsKeyDown(Keys.Space) && MissileFired == null) 
      { 
       MissileFired = new Missile(LauncherXPos, 650); 
      } 

답변

2

침입자에게 ShouldShootMissile과 같은 방법을 추가 할 수 있습니다. 게임 시간을 매개 변수 (아마도 double 또는 XNA GameTime 개체)로 표시해야합니다. 이 함수는 bool을 반환합니다.

그런 다음이 정보를 사용하여 침입자가 다양한 요인에 따라 미사일을 발사 할 자격이 있는지를 결정할 수 있습니다. 이러한 요소들은 아마도 최대 발사 속도 (500ms마다 한 번)와 변동성 (250ms마다)을 나타내는 일정한 요소 일 것입니다. 표준 난수 생성기를 사용하여 컴퓨터에 가변성을 적용하고 이러한 조건에 따라 참 또는 거짓을 반환 할 수 있습니다.

이 같은

아마 뭔가 :

Random rand = new Random(); 
    double lastMissileFired = 0d; 

    private bool ShouldFireMissile(double time) 
    { 
     double fixedDelay = 500d; 
     double firingProbability = 0.1d 

     if (time - lastMissileFired < fixedDelay) 
      return false; 

     if (rand.NextDouble() > firingProbability) 
      return false; 

     lastMissileFired = time; 
     return true; 
    } 

경고, 위의 코드는 아마도 문제의 톤을 가지고 있으며, 거의 확실하게 깨끗하게 프로그램을 적합하지 않습니다, 그러나 희망이 당신의 명확한 그림을 제공합니다 내가 의미. 250ms 가변 지연을 발사 할 수있는 확률로 변경하기로 결정했습니다.

당신은 침입자

if (invader.ShouldFireMissile()) 
    invader.FireMissile(); 
+0

이봐, 답장을 보내 주셔서 감사의 모든 갱신에 위의 코드를 실행하는 것입니다. 샘플 코드를 제공 할 수 있을지 너무 많이 묻는 것입니까?. 감사. – user1275084

+0

일반적으로 '침략자'개체는 발사체 자체가 아닌 미사일을 제출할시기를 결정하는 개체입니다. – Thomas