2013-04-18 3 views
0
**public GraphicsDeviceManager graphics; 
     public SpriteBatch spriteBatch; 
     private int[] Heights; 
     //public Texture2D Terrain; 
     public Texture2D[] TerrainList; 
     public Color[] Colors_TerrainTexture; 
     public int [] Coordinates_X; 
     Camera camera = new Camera(); 
     GraphicsDevice device; 

     public MapFunctions()     
     { 

     } 
public void GenerateMap_Heights(int Map_Width,int Map_Height,float Relief,float Mountain_Peak_Height) 
      { 
       Heights = new int[Map_Width]; 
       Random randomizer = new Random(); 
       double rand1 = randomizer.NextDouble() + 1; 
       double rand2 = randomizer.NextDouble() + 2; 
       double rand3 = randomizer.NextDouble() + 3; 

       float offset = Map_Height/2; 
       float peakheight = 324; 
       float flatness = Mountain_Peak_Height; 

       for (int x = 0; x < Map_Width; x++) 
       { 
        double height = peakheight/rand1 * Math.Sin((float)x/flatness * rand1 + rand1); 
        height += peakheight/rand2 * Math.Sin((float)x/flatness * rand2 + rand2); 
        height += peakheight/rand3 * Math.Sin((float)x/flatness * rand3 + rand3); 
        height += offset; 
        Heights[x] = (int)height; 
       } 
      } 

      public bool CanDraw = false; 

      public void CreateTerrain(int Map_Width, int Map_Height,int TerrainTexture_Width,Color Color_Terrain,Color Color_Background) 
      {    
       int TimesToLoop = (Map_Width/TerrainTexture_Width) + 1; 
       int[] Coordinates_X = new int[TimesToLoop]; 
       device = graphics.GraphicsDevice; 
       for (int b = 0; b <= TimesToLoop; b++) 
       { 
        if (b == TimesToLoop) 
        { 
         Colors_TerrainTexture = new Color[Map_Width % TerrainTexture_Width * Map_Height]; 
         TerrainTexture_Width = Map_Width % TerrainTexture_Width; 
        } 
        else 
        { 
         Colors_TerrainTexture = new Color[TerrainTexture_Width * Map_Height]; 
        } 
        Coordinates_X[b] = TerrainTexture_Width * b; 
        for (int x = 0; x < TerrainTexture_Width; x++) 
        {      
         for (int y = 0; y < Map_Height; y++) 
         { 
          if (y > Heights[x]) 
           Colors_TerrainTexture[x + y * TerrainTexture_Width] = Color.Green; 
          else 
           Colors_TerrainTexture[x + y * TerrainTexture_Width] = Color.Transparent; 
         } 
        }     
        Terrain = new Texture2D(device, TerrainTexture_Width, Map_Height, false, SurfaceFormat.Color); 
        Terrain.SetData(Colors_TerrainTexture); 
        TerrainList[b] = Terrain; //I get nullreference exception in this line 
       } 
       spriteBatch = new SpriteBatch(device); 
       CanDraw = true; 
      }** 

TerrainList [b] = Terrain; (эта строка почти в конце кода) В этой строке я получаю исключение ссылочной ссылки. Я вызываю обе функции (CreateTerrain и GenerateMap_Heights) из game1 LoadContent(). Пожалуйста, помогите, я не могу найти проблему в своем коде.XNA 4.0. Исключение из Null ссылки

Извините за мой плохой английский.

ответ

0

Вы когда-нибудь создавали свой ландшафт? Я просматривал код и не видел его.

Texture2D[] TerrainList = new Texture2D[10]; 

Прямо сейчас вы пытаетесь установить один из Texture2D-х в массиве, но он еще не был создан.

1

Вы создаете вы местность список, но никогда не инициализировать его ...

//Something like 
TerrainList = new Texture2D[]; 

Теперь вы пытаетесь получить доступ к индексу нуль-коллекции.

+0

Ох. Спасибо. Ты лучший. :) – Jancis

+0

За исключением того, что не компилируется ... –

0

TerrainList никогда не инициализируется в предоставленном коде, поэтому, когда вы индексируете его TerrainList[b], это возвращает null. Вам необходимо создать экземпляр Texture2D[] и назначить его TerrainList. Furtermore, вам нужно убедиться, что у него есть как минимум b количество элементов, так как вы используете b для индексации массива.

Смежные вопросы