我想创建一个 Rectangle 结构,它byte
的 x、y、宽度和高度字段为 s 而不是int
s。它应该与通常的兼容Microsoft.Xna.Framework.Rectangle
(铸造(bytesRectangle)
应该可以)。我怎么做?
更新:使用这个结构帮助我为每个图块节省了 12 个字节。
我想创建一个 Rectangle 结构,它byte
的 x、y、宽度和高度字段为 s 而不是int
s。它应该与通常的兼容Microsoft.Xna.Framework.Rectangle
(铸造(bytesRectangle)
应该可以)。我怎么做?
更新:使用这个结构帮助我为每个图块节省了 12 个字节。
您必须定义一个转换来将您的类型转换为 XNA 框架所期望的类型。
我很想知道实现这个结构的设计选择。查看 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 对象中。