Я пытаюсь использовать XML-файл для данных таблицы спрайтов; У меня есть класс фреймов, который содержит прямоугольник или другой список фреймов (это может быть сам фрейм или держатель для большего количества фреймов). В XML хранятся все прямоугольники для фреймов.
Я добавил xml в проект контента и использую Content.load ("xmlname") для его загрузки.
Все это прекрасно работает при однократном использовании. Но когда я создаю 2 объекта, которые совместно используют одну и ту же таблицу спрайтов (и, следовательно, одни и те же данные XML), они исчезают, когда эти 2 объекта находятся в одном кадре. После большого разочарования я понял, что xml-файл всегда возвращает один и тот же объект, поэтому разделяет фреймы, поэтому он может рисовать фрейм только по одному месту за раз.
Вот короткая часть XML-файла:
<?xml version="1.0" encoding="utf-8"?>
<rect>0 0 0 0</rect>
<frames>
<Item>
<rect>0 0 0 0</rect>
<frames>
<Item>
<rect>19 27 15 22</rect>
<frames></frames>
<label>DOWN</label>
</Item>
<Item>
<rect>2 27 15 23</rect>
<frames></frames>
<label>DOWN</label>
</Item>
<Item>
<rect>19 27 15 22</rect>
<frames></frames>
<label>DOWN</label>
</Item>
<Item>
<rect>36 27 15 23</rect>
<frames></frames>
<label>DOWN</label>
</Item>
</frames>
<label>DOWN</label>
</Item>
Урезанная версия класса:
public class Frame
{
public Rectangle rect; //means this is an image
private Renderable renderable = null;
private List<Frame> frames;
private Texture2D texture;
private int currentFrame = 0;
пример использования:
Sprite sprite1 = new Sprite();
sprite1.frame = Content.load<Frame>("xml");
sprite1.frame.getFrame(0).alpha = 0.5f;
Sprite sprite1 = new Sprite();
sprite2.frame = Content.load<Frame>("xml"); //<--- doesn't return a new object, returns the same object as sprite 1 uses
//frame 0 in sprite 2 has an alpha of 0.5 aswell, without having modified it
Я пытался десериализовать xml вручную, но десериализация списков - это кошмар.
Я что-то здесь не так делаю? Кажется настолько странным, что он возвращает тот же объект