2013-09-25 26 views
0

我想從一個我創建的基於隨機生成的數字繪製精靈的類訪問繪製方法。我得到的,當我試圖訪問這些錯誤是這樣的:如何從另一個創建的類訪問spriteBatch.Draw?

錯誤1無法訪問外類​​型的非靜態成員

public class Game1 : Microsoft.Xna.Framework.Game 
     { 
      GraphicsDeviceManager graphics; 
      SpriteBatch spriteBatch; 
      Texture2D EarthGrass; 
      Texture2D EarthDirt; 
      Texture2D PooperMachoOre; 
      Vector2 BlockBrush; 
      System.Random IDB = new System.Random(1); 
      System.Random IDB2 = new System.Random(5); 

      public Game1() 
      { 
       graphics = new GraphicsDeviceManager(this); 
       Content.RootDirectory = "Content"; 

      } 

      public class WorldGenerationOverall 
      { 
       System.Random IDB = new System.Random(); 
       Vector2 BlockBrush = new Vector2(0, 300); 


       public WorldGenerationOverall() 
       { 
        int constructer = 0; 
        constructer += 1; 

       } 
       public void Generate0H() 
       { 
        BlockBrush.X = 300; 
       } 
       public void GenerateHeight10() 
       {    
        for (BlockBrush.Y = 320; BlockBrush.Y < 500; BlockBrush.Y += 20) 
        { 
         for (BlockBrush.X = 0; BlockBrush.X < 820; BlockBrush.X += 20) 
         { 
          int IDBint = IDB.Next(11); 
          if (IDBint == 10) 
          {        
           spriteBatch.Draw(PooperMachoOre, BlockBrush, Color.White); 
          } 
          else 
          { 
           spriteBatch.Draw(EarthDirt, BlockBrush, Color.White); 
          } 
         } 
        } 
       } 
      } 

      public override void Initialize() 
      { 
       // TODO: Add your initialization logic here    
       BlockBrush = new Vector2(0, 300); 
       WorldGenerationOverall super = new WorldGenerationOverall(); 
       base.Initialize(); 

      } 

      protected override void LoadContent() 
      { 
       // Create a new SpriteBatch, which can be used to draw textures. 
       spriteBatch = new SpriteBatch(GraphicsDevice); 
       WorldGenerationOverall super = new WorldGenerationOverall(); 


       // TODO: use this.Content to load your game content here 
       EarthDirt = Content.Load<Texture2D>("Sprites/Ground/EarthDirt"); 
       EarthGrass = Content.Load<Texture2D>("Sprites/Ground/EarthGrass"); 
       PooperMachoOre = Content.Load<Texture2D>("Sprites/Ores/PooperMachoOre"); 
      } 


      public override void Draw(GameTime gameTime) 
      { 
       GraphicsDevice.Clear(Color.White); 

       // TODO: Add your drawing code here\ 
       spriteBatch.Begin(); 
       WorldGenerationOverall super = new WorldGenerationOverall(); 
       super.Generate0H(); 
       super.GenerateHeight10(); 
       spriteBatch.End(); 

       base.Draw(gameTime); 
      } 
     } 
    } 
+0

也許這將有助於:http://stackoverflow.com/questions/16320935/cannot-access-a-non-static-member-of-outer-type-via-nested-type – davidsbro

+0

我檢查了頁面,它顯示繼承和靜態類的類型,但不是如何將它實現到XNA繪圖方法中,就像它在創建XNA項目時創建的spriteBatch.Draw一樣。 –

+1

嘗試將WorldGenerationOverall類移出遊戲類,然後通過執行WorldGenerationOverall.GenerateHeight10(SpriteBatch spritebatch)將遊戲的'spritebatch'傳遞給'WorldGenerationOverall.GenerateHeight10()'void,或者只需將spritebatch屬性'WorldGenerationOverall'類,當初始化'WorldGenerationOverall'時,將其'spritebatch'屬性設置爲主遊戲的屬性。 – davidsbro

回答

2

你可以簡單地通過你SpriteBatch通過參數像這樣的方法:

public void GenerateHeight10(SpriteBatch spriteBatch) 
{ 
     //Do stuff with spriteBatch 
} 

WorldGenerationOverall super = new WorldGenerationOverall(); 
super.Generate0H(); 
super.GenerateHeight10(spriteBatch); 

此外,只是好奇,爲什麼你每個框架新的WorldGenerationOverall對象?