我想创建一个 Rectangle 结构,它具有用于 x、y、宽度和高度字段的 byte
而不是 int
。它应该与通常的 Microsoft.Xna.Framework.Rectangle
兼容(转换为 (bytesRectangle)
应该没问题)。我该怎么做?
更新:使用这个结构帮助我为每个图 block 节省了 12 个字节。
最佳答案
我很想知道实现此结构的设计选择。查看 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 类。不要让小矩形类(或管理器)“兼容”。
在内存中存储所需数据的最佳方法是只存储四个字节而没有开销。无开销地存储两个字节的最佳方法是使用 Tuple 类。
所以我建议您创建一个矩形管理器类,在内部将矩形存储为元组,然后根据需要将它们“装箱”和“拆箱”到 Xna 对象中。
关于c# - 如何创建与 Rectangle 兼容的自定义结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11976602/