我想使用一个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