我想使用一個xml文件作爲spritesheet數據;我有一個框架類,它包含一個矩形或另一個框架列表(它可以是一個框架本身,或持有更多的框架)。 XML保存所有框架的矩形。 我已將xml添加到內容項目,並使用Content.load(「xmlname」)加載它。使用content.load的XNA XML總是返回相同的對象?
這一切使用它一次完美罰款。但是,當我創建共享相同spritesheet的2個對象(並且因此具有相同的xml數據)時,它們在這兩個對象位於同一幀上時消失。在經歷了很多挫折之後,我發現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,但反序列化列表是一場噩夢。 我在這裏做錯了什麼?似乎很奇怪,它返回相同的對象
啊我明白了。我通過序列化和反序列化對象來嘗試克隆方法。但是這造成了列表中的許多問題。 感謝您的鏈接,它的確非常醜陋。但至少可以幫助我繼續前進。 – omgnoseat 2012-03-13 15:09:28
我剛剛實現了一個自定義的contentmanager,它效果很棒!我想看看是否有任何其他解決方案,但如果我沒有獲得任何解決方案,我會接受這種解決方案。 謝謝一堆 – omgnoseat 2012-03-13 16:04:55