2012-08-15 71 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