Хранение 100 векторов XNA

Я делаю 2D-игру на выживание сверху вниз, максимальное количество спрайтов для верхнего уровня составляет 100 спрайтов. Когда я использую случайное значение для генерации их векторных позиций, иногда я получаю некоторое перекрытие между спрайтами.

Поэтому, чтобы бороться с этим, я собираюсь сохранить некоторые заранее определенные позиции.

Вопрос

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

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

Большое спасибо


person Lee Brindley    schedule 14.04.2013    source источник


Ответы (2)


Да, сохраните их в текстовом файле CSV (значения, разделенные запятыми) или, если хотите, используйте базу данных, хотя я бы рекомендовал первое. Хранение базы данных звучит как излишество в вашей ситуации. При запуске вы загружаете значения в массив. Если вы этого не сделаете, игра будет отставать каждый раз, когда она получает значение. Вам просто нужен текстовый файл для постоянного хранения, а затем массив для использования.

Надеюсь, это прояснит вашу проблему для вас!

person FrostyFire    schedule 14.04.2013
comment
Спасибо за Ваш ответ! Это решение, которое я реализовал :) - person Lee Brindley; 15.04.2013

Почему бы вам просто не проверить, перекрываются ли позиции спрайтов? Если спрайты не часто перекрываются, это не должно добавлять слишком много вычислений и приводить к большей случайности, чем шаблон с фиксированным положением.

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

if (addSprite)
{
Entity newEntity = new Entity(random position);
foreach (Entity e in entityList)
{
if (newEntity.rectangle(Intersects(newEntity.rectangle))
{
//give a new position to newEntity and run this loop again
}
else
{
entityList.add(newEntity);
}
}
person Madmenyo    schedule 21.04.2013
comment
Будет ли это рассматриваться как метод грубой силы? С небольшим окном просмотра и таким количеством спрайтов это может привести к большому количеству прогонов цикла? - person Lee Brindley; 21.04.2013