Почему мой массив продолжает отображать одно и то же число для каждой переменной?

У меня есть цикл for, который перебирает массив прямоугольников по мере их появления. Для каждого нового прямоугольника, добавляемого в массив, поверх него рисуется спрайт. Я хочу, чтобы каждый спрайт, нарисованный поверх прямоугольников, имел собственную переменную, которая изменяет рисунок спрайта. В то время как на экране в основном каждый прямоугольник должен иметь свой спрайт, нарисованный на нем -------------------------------------------------- -Я не могу понять, как дать каждому спрайту свою собственную переменную, не задав одну и ту же переменную всем остальным спрайтам. Этот код заканчивает тем, что рисует один и тот же спрайт на каждом прямоугольнике. Вот что у меня пока есть..

  int arrayplace = 0;

 for(Rectangle  rain: rectangleArray) { 

    numberArray.add(arrayPlace, MathUtils.random(3);
    //adds a variable to a certain spot on the array
    // picks random# within range given
    arrayplace++;           

          if (numberArray.get(arrayPlace)==1){
              spritebatch.draw(spriteOne, rain.x, rain.y);
          };
          if (numberArray.get(arrayPlace)==2){
              spritebatch.draw(spriteTwo, rain.x, rain.y);
          }
          if (numberArray.get(arrayPlace)==3){
              spritebatch.draw(spriteThree, rain.x, rain.y);
          }
  }

person Kohler Fryer    schedule 27.08.2012    source источник
comment
По какой-то странной причине я не смог найти класс MathUtils в документации! Как вы его использовали?   -  person iTurki    schedule 27.08.2012
comment
@iturki Mathutils находится в библиотеке, известной как libgdx.   -  person aug    schedule 27.08.2012
comment
Не могли бы вы поместить ссылку в свой вопрос.   -  person iTurki    schedule 27.08.2012
comment
Да, извините, позвольте мне изменить это   -  person Kohler Fryer    schedule 27.08.2012
comment
Вы изменили MathUtils на Math? какой это класс? java.lang.Математика?   -  person iTurki    schedule 27.08.2012
comment
Вот исходный код libGDX MathUtils: github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/   -  person P.T.    schedule 27.08.2012


Ответы (3)


Ошибка:

arrayplace++;  

Вы увеличиваете arrayplace слишком рано, поэтому оно указывает на индекс, стоящий за добавленным вами значением.

person Roland    schedule 09.12.2013

Как работают генераторы случайных чисел, они генерируют серию чисел на основе «начального» значения. Первое число в ряду будет таким же при одном и том же семени. Правильно ли вы используете свою случайную функцию? Скорее всего, значение «10», которое вы передаете случайному методу, является семенем. Вам нужно вызвать какую-то другую функцию, чтобы получить следующее случайное число? Проверьте документацию по случайным функциям. Вот случайный документ Java: http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Random.html#Random(long) Обратитесь к использованию начального параметра в конструкторе и методе следующий() или следующийInt()

Идя дальше, я думаю, вам нужно менять «начальное число» на генератор случайных чисел каждый раз, когда вы входите в цикл, вместо того, чтобы использовать константу 10.

person Sameer    schedule 27.08.2012
comment
Хорошая теория, но 10 — это не случайное семя, а диапазон. См.: github. com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/ - person P.T.; 27.08.2012
comment
Я обновил свой вопрос и код, чтобы придать больше смысла, извините за путаницу. - person Kohler Fryer; 01.09.2012

Я предполагаю, что причина, по которой вы получаете одно и то же случайное число, заключается в том, что вы инициализируете класс в каждом цикле. Итак, вы генерируете первое число, которое каждый раз будет одинаковым.

  • Попробуйте инициализировать объект MathUtils вне цикла for:

    MathUtils m = new MathUtils();
    
  • И внутри цикла используйте эту строку для генерации числа:

    PointlessRect.x = m.random(10);
    

Надеюсь, это сработает

person iTurki    schedule 27.08.2012
comment
Спасибо, в итоге я использовал код из библиотеки, которая у меня была, как вы можете видеть в ревизии. - person Kohler Fryer; 27.08.2012
comment
Это хорошая теория, но класс libGDX MathUtil содержит только статические методы. См.: github. com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/ - person P.T.; 27.08.2012
comment
Я обновил свой вопрос и код, чтобы придать больше смысла, извините за путаницу. - person Kohler Fryer; 01.09.2012