我想创建一个矩形结构,它具有用于x,y,宽度和高度字段的byte
s,而不是int
s。它应该与通常的Microsoft.Xna.Framework.Rectangle
兼容(铸造为(bytesRectangle)
应该没问题)。我怎么做?如何创建与矩形兼容的自定义结构?
UPD:使用这个结构帮助我节省每瓦12个字节。
我想创建一个矩形结构,它具有用于x,y,宽度和高度字段的byte
s,而不是int
s。它应该与通常的Microsoft.Xna.Framework.Rectangle
兼容(铸造为(bytesRectangle)
应该没问题)。我怎么做?如何创建与矩形兼容的自定义结构?
UPD:使用这个结构帮助我节省每瓦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上,那么你应该创建一个Small矩形管理器类,它不会以相同的属性存储它们。但是这个班级在你需要时很擅长创建XNA。不要让小矩形类(或管理器)“兼容”。
将内存中需要的数据存储在内存中的最佳方式是仅存储四个字节,而无需开销。在没有开销的情况下存储两个字节的最好方法是使用Tuple类。
因此,我建议你根据需要进行到XNA对象内部存储的矩形元组,然后在“盒子”和“unboxes”他们一个长方形管理器类。
我真的想要保存一些内存,因为我将使用数百万个带有矩形字段的类实例,但重写现有代码不应太难。 – user1306322 2012-08-15 20:28:39
我的评论被移到答案的末尾。 – Hogan 2012-08-15 20:34:42
我认为这被称为一个点。我需要全部四个(x,y,宽度,高度)。无论如何,感谢代码库,它帮助我理解了如何进行转换。 – user1306322 2012-08-15 21:02:53
您必须定义转换才能将您的类型转换为XNA框架所需的类型。
与矩形兼容究竟如何? – FishBasketGordo 2012-08-15 20:19:42
我应该可以像BytesRectangle一样投射,并且可以。 – user1306322 2012-08-15 20:24:19
为什么你真的需要这个?听起来像[早熟优化](http://c2.com/cgi/wiki?PrematureOptimization)。 – 2012-08-15 20:32:05