我想創建一個矩形結構,它具有用於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