Не могу использовать переменную в другом методе в XNA - PullRequest
0 голосов
/ 02 августа 2011

Я объясню подробно после. Итак, вот мой код, у нас есть переменная Elevation [], и каждое повышение получает случайное число:

public void elevation()
    {
        for (x = (int)Width - 1; x >= 0; x--)
        {
            for (y = (int)Width - 1; y >= 0; y--)
            {
                y = rand.Next((int)MaxElevation); //random number for each y.
                Elevation[x] = y; //each Elevation gets a random number.
            }
        }
    }

После этого я пытаюсь использовать это случайное число в методе рисования следующим образом:

public void Draw(SpriteBatch spriteBatch)
    {
        for (x = (int)Width - 1; x >= 0; x--)
        {
            spriteBatch.Draw(Pixel, new Rectangle((int)Position.X + x, (int)Position.Y - Elevation[x], 1, (int)Height), Color.White);
            //HERE, I try to acces the random number for each Elevation (y value). But I get 0 everywhere.
        }
    }

Как я могу получить доступ к этому случайному числу?

Если я сделаю это:

public void Draw(SpriteBatch spriteBatch)
    {
        for (x = (int)Width - 1; x >= 0; x--)
        {
            for (y = (int)Width - 1; y >= 0; y--)
            {
                y = rand.Next((int)MaxElevation);
                spriteBatch.Draw(Pixel, new Rectangle((int)Position.X + x, (int)Position.Y - Elevation[y], 1, (int)Height), Color.White);
            }
        }
    }

Я смогу получить доступ к случайным числам, но он будет обновлять каждый кадр, и случайные числа изменятся. Поэтому мне нужно рассчитать их один раз, а затем использовать их.

Вот весь код:

namespace procedural_2dterrain
{
  class Terrain
{
    Texture2D Pixel;
    Vector2 Position;
    Random rand;

    int[] Elevation;

    float MaxElevation;
    float MinElevation;

    float Width;
    float Height;

    int x;
    int y;


    public void Initialize( ContentManager Content, float maxElevation, float minElevation, float width, float height, Vector2 position)
    {
        Pixel = Content.Load<Texture2D>("pixel");
        rand = new Random();

        Elevation = new int[(int)width];

        MaxElevation = maxElevation;
        MinElevation = minElevation;

        Width = width;
        Height = height;

        Position = position;

        elevation();

    }

    public void Update()
    {
    }

    public void elevation()
    {
        for (x = (int)Width - 1; x >= 0; x--)
        {
            for (y = (int)Width - 1; y >= 0; y--)
            {
                y = rand.Next((int)MaxElevation);
                Elevation[x] = y;
            }
        }
    }

    public void Draw(SpriteBatch spriteBatch)
    {
        for (x = (int)Width - 1; x >= 0; x--)
        {
            spriteBatch.Draw(Pixel, new Rectangle((int)Position.X + x, (int)Position.Y - Elevation[x], 1, (int)Height), Color.White);
        }
    }

}

}

1 Ответ

1 голос
/ 03 августа 2011

Проблема с вашим elevation() методом.Вы используете y в качестве внутреннего индексатора цикла, а также присваиваете ему значение в цикле.Итак, цикл начинается, y назначается случайное значение.Поскольку он продолжает цикл, он уменьшается и затем проверяется на >=0.Единственный раз, когда этот цикл завершится, если y назначено случайное число 0.Вот почему все ваши Elevation равны нулю.

Я немного смущен тем, почему вы думаете, что вам нужен внутренний цикл.Попробуйте:

public void elevation()
{
    for (x = (int)Width - 1; x >= 0; x--)
    {            
        Elevation[x] = rand.Next((int)MaxElevation);            
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...