2012-08-15 40 views
1

我想创建一个矩形结构,它具有用于x,y,宽度和高度字段的byte s,而不是int s。它应该与通常的Microsoft.Xna.Framework.Rectangle兼容(铸造为(bytesRectangle)应该没问题)。我怎么做?如何创建与矩形兼容的自定义结构?

UPD:使用这个结构帮助我节省每瓦12个字节。

+0

与矩形兼容究竟如何? – FishBasketGordo 2012-08-15 20:19:42

+0

我应该可以像BytesRectangle一样投射,并且可以。 – user1306322 2012-08-15 20:24:19

+1

为什么你真的需要这个?听起来像[早熟优化](http://c2.com/cgi/wiki?PrematureOptimization)。 – 2012-08-15 20:32:05

回答

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上,那么你应该创建一个Small矩形管理器类,它不会以相同的属性存储它们。但是这个班级在你需要时很擅长创建XNA。不要让小矩形类(或管理器)“兼容”。

将内存中需要的数据存储在内存中的最佳方式是仅存储四个字节,而无需开销。在没有开销的情况下存储两个字节的最好方法是使用Tuple类。

因此,我建议你根据需要进行到XNA对象内部存储的矩形元组,然后在“盒子”和“unboxes”他们一个长方形管理器类。

+0

我真的想要保存一些内存,因为我将使用数百万个带有矩形字段的类实例,但重写现有代码不应太难。 – user1306322 2012-08-15 20:28:39

+0

我的评论被移到答案的末尾。 – Hogan 2012-08-15 20:34:42

+0

我认为这被称为一个点。我需要全部四个(x,y,宽度,高度)。无论如何,感谢代码库,它帮助我理解了如何进行转换。 – user1306322 2012-08-15 21:02:53

相关问题