2013-01-21 26 views
0

因此,我在XNA中創建了一個小型遊戲,並且正處於AI編碼階段。我目前的問題是我無法加載redNinja的X位置(玩家的角色),並讓藍色忍者(AI)讀取它並朝它走去。在類之間加載X位置給出了「字段永遠不會分配給」警告

每次我嘗試通過redNinja.Position.X引用它時,它會給我提示field is never assigned to, and will always have it's default value null.警告。

namespace Ninja_DM 
{ 
class AI 
{ 
    Texture2D blueNinja; 
    Ninjas redNinja; 
    float timer = 0f; 
    float interval = 130f; 
    int currentFrame = 0; 
    int spriteSpeed = 2; 
    int spriteWidth = 32; 
    int spriteHeight = 28; 
    public Rectangle sourceRect; 
    Vector2 position_b; 
    Vector2 origin; 

    public Vector2 Position 
    { 
     get { return position_b; } 
     set { position_b = value; } 
    } 

    public Vector2 Origin 
    { 
     get { return origin; } 
     set { origin = value; } 
    } 

    public Texture2D Texture 
    { 
     get { return blueNinja; } 
     set { blueNinja = value; } 
    } 

    public Rectangle SourceRect 
    { 
     get { return sourceRect; } 
     set { sourceRect = value; } 
    } 

    public AI(Texture2D texture, int currentFrame, int spriteWidth, int spriteHeight) 
    { 
     this.blueNinja = texture; 
     this.currentFrame = currentFrame; 
     this.spriteWidth = spriteWidth; 
     this.spriteHeight = spriteHeight; 
    } 

    public void AIMovement(GameTime gameTime) 
    { 
     sourceRect = new Rectangle(30 * currentFrame, 0, 30, 37); 

     if (position_b.X > redNinja.Position.X) 
     { 
      AnimateLeftAI(gameTime); 
      if (position_b.X < 20) 
      { 
       position_b.X += spriteSpeed; 
      } 
     } 

     if (position_b.X < redNinja.Position.X) 
     { 
      AnimateRightAI(gameTime); 
      if (position_b.X < 1100) 
      { 
       position_b.X += spriteSpeed; 
      } 
     } 

    } 

    public void AnimateLeftAI(GameTime gameTime) 
    { 

     timer += (float)gameTime.ElapsedGameTime.TotalMilliseconds; 

     if (timer > interval) 
     { 
      currentFrame++; 

      if (currentFrame > 4) 
      { 
       currentFrame = 3; 
      } 
      timer = 0f; 
     } 
    } 

    public void AnimateRightAI(GameTime gameTime) 
    { 

     timer += (float)gameTime.ElapsedGameTime.TotalMilliseconds; 

     if (timer > interval) 
     { 
      currentFrame++; 

      if (currentFrame > 4) 
      { 
       currentFrame = 3; 
      } 
      timer = 0f; 
     } 
    } 
} 
} 
+0

這是_warning_。 – SLaks

+0

我的不好。我仍然從編碼開始。無論如何,有沒有辦法解決它/解除警告? – user1998250

+0

@ user1998250您可能希望使用默認值填充它,在這種情況下手動執行而不是依賴編譯器會提高可讀性並使錯誤消失,或者您實際上希望它在某個時間點被初始化,在這種情況下,你沒有這樣做。 – Servy

回答

1

你需要調用AIMovement(),這樣的事情時,給玩家帶來的忍者作爲參數:

public void AIMovement(GameTime gameTime, Ninjas playerNinja) 
{ 
    sourceRect = new Rectangle(30 * currentFrame, 0, 30, 37); 

    if (position_b.X > playerNinja.Position.X) 
    { 
     AnimateLeftAI(gameTime); 
     if (position_b.X < 20) 
     { 
      position_b.X += spriteSpeed; 
     } 
    } 

    if (position_b.X < playerNinja.Position.X) 
    { 
     AnimateRightAI(gameTime); 
     if (position_b.X < 1100) 
     { 
      position_b.X += spriteSpeed; 
     } 
    } 

} 

通知你真的不需要申報叫了一個字段變量因爲你將Ninjas帶入,因爲你正在測試這個方法的參數/參數。

+0

嗯,我明白了!現在我只需要修理一下AI,看看我能做些什麼。非常感謝! – user1998250

相關問題