我想创建一个Rectangle结构,其中包含x,y,width和height字段的byte
s而不是int
s。它应该与通常的Microsoft.Xna.Framework.Rectangle
兼容(因为(bytesRectangle)
应该没有问题)。我该怎么做?
Upd:使用此结构帮助我为每个磁贴节省了12个字节。
答案 0 :(得分:3)
您必须定义转换以将您的类型转换为XNA框架所期望的类型。
答案 1 :(得分:3)
我很想知道实现这个结构的设计选择。看看Microsoft.Xna.Framework.Rectangle,我们看到有超过30个属性和成员。这是为了节省几个字节而重现的。如果你唯一的目标是节省一些字节,那么可能会有更好的方法。例如,如果要将数据保存在较小的空间中,可以定义一个对象和一个转换来存储它。像这样:
class SmallRectangle
{
public byte x { get; set; }
public byte y { get; set; }
public SmallRectangle(byte inx, byte iny)
{
x = inx;
y = iny;
}
public static explicit operator SmallRectangle(Microsoft.Xna.Framework.Rectangle big)
{
SmallRectangle small = new SmallRectangle((byte)big.x, (byte)big.y);
return small;
}
public WriteToFile(FileStream out)
{
//....
}
}
当然,完整的实施将包括测试,以确保铸件等没有数据丢失。
根据您的评论如下:这不是方向。如果你真的需要在使用XNA时通过XNA保存内存,那么你应该创建一个小矩形管理器类,它不会以相同的方式存储它们具有相同的属性。但是这个类很适合在需要时创建XNA。不要让小矩形类(或管理器)“兼容”。
在内存中存储所需数据的最佳方法是只存储四个BYTES而不会产生任何开销。存储两个字节而没有开销的最佳方法是使用Tuple类。
所以我建议你创建一个矩形管理器类,在内部将矩形存储为元组,然后根据需要将它们“盒子”和“解盒”到Xna对象中。