2012-03-18 62 views
1

我正在爲基於圖塊的遊戲創建一個基本級別的編輯器,所以我正在尋找一個很好的/最佳的方式來繪製一組等於最低(〜1080p)屏幕分辨率的圖塊。通過這種方式,我可以在必要時快速重繪內容(包括重疊網格)。用於在Windows窗體中重繪/繪製大圖形內容的好控制是什麼?

我一直試圖通過在OnPaint事件中繪製使用PictureBox控件來工作。起初,我認爲這可能是一個好主意,直​​到我意識到當我添加一個簡單的網格繪圖算法後,重繪速度變慢了 - 它需要幾秒鐘才能以高分辨率完成重繪(儘管如此,仍然可以使用< 1080p)。

我看不出這個解決方案的伸縮性能夠讓我創建一個無延遲的編輯器。有沒有人有任何建議,使這種半激烈的圖形繪製/重繪可能的組件或方法?

注意:理想情況下,我想使用可以放置在面板中的控件,使面板的自動滾動功能適用於在控件周圍平移,如果它太大。

繪圖代碼

public void DrawLevel(Graphics graphics, Rectangle viewport) 
{ 
    SolidBrush b = new SolidBrush(Color.DarkGray); 
    graphics.FillRectangle(b, 0, 0, viewport.Width, viewport.Height); 
} 

public void DrawGrid(Graphics graphics, Rectangle viewport) 
{ 
    Pen p = new Pen(Color.Black, 1); 
    for (int x = 0; x < viewport.Width; x++) 
    { 
     for (int y = 0; y < viewport.Height; y++) 
     { 
      if (x == 0 || (x % 32) == 0) 
       graphics.DrawLine(p, x, 0, x, viewport.Height - 1); 
      if (y == 0 || (y % 32) == 0) 
       graphics.DrawLine(p, 0, y, viewport.Width - 1, y); 
     } 
    } 
} 
+1

「需要幾秒鐘才能完成高分辨率重繪」 - 似乎太慢了。懷疑你的算法....發佈你的代碼 – 2012-03-18 02:04:29

+0

繪製代碼編輯 - 我已經知道繪製網格可以通過增加x和y的速度32,而不是使用模,但我不認爲它可以_that_不同於這個比例。 – mina 2012-03-18 02:27:49

回答

2

可以使用OpenTK用GLControl。

+0

我完全同意。如果您想創建任何類型的遊戲,請不要使用Windows窗體。這不是成功的坑。你將無法建立任何種類的高級場景。只要你做了最基本的事情,你就需要重新學習一個新的渲染框架。 – 2012-03-18 02:54:23

+0

是的,GLControl正是我一直在尋找的東西。謝謝〜 – mina 2012-03-18 21:42:39

3

該代碼是與怪O(viewport.Width * viewport.Height)

for (int x = 0; x < viewport.Width; x++) 
{ 
    for (int y = 0; y < viewport.Height; y++) 
    { 
     if (x == 0 || (x % 32) == 0) 
      graphics.DrawLine(p, x, 0, x, viewport.Height - 1); 
     if (y == 0 || (y % 32) == 0) 
      graphics.DrawLine(p, 0, y, viewport.Width - 1, y); 
    } 
} 

使用下一個代碼與O((viewport.Width + viewport.Height)/ 32)

for (int x = 0; x < viewport.Width; x+=32) 
{ 
    graphics.DrawLine(p, x, 0, x, viewport.Height - 1); 
} 
for (int y = 0; y < viewport.Height; y+=32) 
{ 
    graphics.DrawLine(p, 0, y, viewport.Width - 1, y); 
}