2012-02-25 52 views
1

假設我在C#中使用System.Drawing爲圖形制作2D Tile Based遊戲。System.Drawing快速足夠2D遊戲編程?

面向GDI的OOP層?

System.Drawing命名空間提供對GDI +基本圖形功能的訪問。〜MSDN

回來時,我是用C起步的顯卡&遊戲編程,有很多的書籍,如this人教我,一個軟件渲染API像GDI是不是在運行雙緩衝2D遊戲足夠有效一個體面的FPS。那麼Microsoft .NET的System.Drawing實現屬於同一類別嗎?它是否使用GDI & GDI +,還是可以使用另一個更快的後端?

我希望多少FPS?

即使System.Drawing只能使用GDI,是不是可以使用GDI以每秒50-60幀的速度運行遊戲?

回答

3

這不是一個真正的問題,它速度不夠快,因爲它適合您想要執行的任務。誠實地說,實現基本功能很容易,可以實現XNA等您需要的繪圖,而且您可以免費獲得這麼多。沒有理由去製作遊戲System.Drawing

這本書很古老,但它包含了一些從未過時的算法,它絕大部分都是過時的。至於你能從System.Drawing得到多少FPS,你可以從簡單的基於平鋪的遊戲中獲得足夠多的FPS。如果你這樣做,它會起作用,但是它會阻礙你在以後取得真正的進步 - 尤其是現在使用XNA製作遊戲的門檻如此之低。

1

這完全取決於你的場景是多麼複雜,這完全是無法估量的,你會得到什麼樣的FPS。 GDI/+渲染的最大限制是位圖存儲在主存儲器中,而不是視頻適配器內存中。因此,大多數繪製的內容都必須從RAM複製到視頻適配器的幀緩衝區。當然,只要你不採用可以管理視頻適配器上的內存的API,那就相對較慢但是不可避免。有幾個原因可以避免這種API,沒有任何硬件不支持DirectX。

頁面翻轉的等價物很容易得到,只需將窗體或控件的DoubleBuffered屬性設置爲true即可。你繪製的任何東西首先進入後臺緩衝區,在Paint事件完成後,該緩衝區將被傳送到視頻適配器。唯一不能得到的是與適配器的垂直刷新間隔同步,因此撕裂是非常不可避免的。如何注意這將取決於你在場景中移動物體的速度。

唯一的其他細節是您繪製的任何位圖的像素格式。精靈,紋理,諸如此類的東西。您選擇的格式非常重要。在當前的硬件上,Format32bppPArgb比其他任何硬件快十倍。如果您對位圖執行任何縮放,那麼Graphics.InterpolationMode屬性對速度很重要。好的很貴。只要確保只有一個線程同時訪問位圖,就可以在工作線程中重新縮放它們。

但一定要看看DirectX(例如SlimDX)和XNA。爲了方便而難以打敗,只是少了很多工作要做。

+0

SlimDX(http://slimdx.org)是一個非常好的建議,作爲一個託管的Direct2D/Direct3D包裝(加上很多其他功能),如果你的目標是Windows,我會推薦它通過XNA或MDX 。如果你認爲你會去其他平臺,你可能想投資於OpenGL。用於.NET的OpenTK(http://opentk.com)綁定也相當完整。 – holtavolt 2012-02-26 14:52:34