2012-04-10 67 views
2

我正在製作一個2D方塊遊戲,現在是製作好地圖編輯器的時候了。使用picturebox或類似控件製作2D圖塊編輯器

早些時候,我嘗試使用DataGridView,但它竟然是superslow。

我想出應該有另一種方式來繪製瓷磚(實際圖像或彩色背景)及其參數(文本)。圖片框!

有沒有簡單的方法來訪問像素的2D陣列,在所需的座標插入瓷磚圖像,獲得指針座標和所有的東西,或者我應該嘗試使用完全不同的方法?

+0

還有約圖像轉換爲地圖[鏈接]一個有用的職位(http://stackoverflow.com/q/10127871/1306322) – user1306322 2012-04-12 19:00:25

回答

5

使用任何控件網格將超級低。繪製網格的正確方法是繪製網格。

您可以創建自己的控件,將圖像或索引/鍵的數組放入圖像容器並繪製它們。

從控件派生您的自定義控件,而不是UserControl(UserControl是一個控件容器,如果您需要滾動條,則不需要該控件容器,或者從ScrollableControl替代)。重寫OnPaint方法以執行繪圖。使用傳遞給OnPaint的Graphics對象,它具有繪製文本,基元和位圖的方法。

您可以通過重寫MouseDown/Up來處理用戶輸入,或讓消費者處理它,但提供HitTest方法,以便給定的X,Y可以轉換爲網格索引。

我在這裏有一些代碼C# Drawing circles in a panel用於繪製橢圓以響應用戶輸入。從該代碼中,您可以看到一個在控件上繪製某個狀態的示例(該情況下的控件是表單,但可以外推到您的自定義控件)。注意構造函數中的SetStyle調用來消除閃爍。另外請注意,當你改變狀態時,你不會嘗試重繪,你只需要使Invalidate失效,它告訴操作系統你需要重繪。

更新

這裏是一個非常原始的例子,讓你開始: http://pastebin.com/DseuN56y

+0

我添加了一個鏈接到我鞭打的例子。 – Tergiver 2012-04-10 17:57:55

+0

太棒了!謝謝,這看起來就像我想象的那樣。 – user1306322 2012-04-10 18:41:51