2012-03-26 84 views
4

在我的「遊戲」中,我將繪製一個小地圖(即10x10字段)。每個領域將代表一堵牆或地面。根據這個問題的答案,瓷磚將是PNG圖像或簡單的彩色矩形。在WPF中繪製瓷磚地圖的最簡單方法

什麼是你的最好推薦的方式來繪製這樣的WPF地圖?我希望它是儘可能簡單,因爲這個項目的GUI部分不是很重要,我只是希望它顯示在窗口的中心。

想法,我有:

  • Canvas +放置多個Rectangle S作爲孩子的引擎進行渲染
  • 位圖,通過GUI
  • 外部庫顯示?
+0

你如何定義「最好」?易於編程,性能,內存使用,CPU ...? – 2012-03-26 16:34:42

+0

易於編程最重要 – emesx 2012-03-26 16:36:08

回答

5

作爲Windows Forms,WPF並不傾向於繪製。 WPF更加面向內容。

「繪製」某物的最佳方式是從現有的WPF元素中生成地圖。例如,您可以使用GridUniformGrid或甚至Canvas來佈置您的內容。您可以以編程方式將Image s和Rectangle s添加到地圖中,而不用擔心任何繪圖代碼。

下面是一個例子:

UniformGrid grid = new UniformGrid(); 
grid.Columns = 10; 
grid.Rows = 10; 
grid.Width = columnWidth * 10; 
grid.Height = rowHeight * 10; 
for (int x = 0; x < 10; x++) 
{ 
    for (int y = 0; y < 10; y++) 
    { 
     if (fields[x, y] is SomeImage) 
     { 
      Image img = new Image(); 
      img.Source = someImageSource; 
      grid.Children.Add(img); 
     } 
     else 
     { 
      Rectangle rect = new Rectangle(); 
      rect.Fill = someColor; 
      grid.Children.Add(rect); 
     } 
    } 
} 
Canvas.SetLeft(grid, (canvas.Width - grid.Width)/2); 
Canvas.SetTop(grid, (canvas.Height - grid.Height)/2); 
canvas.Children.Add(grid); 

你可能無法按原樣使用,但你可以在缺件填寫。

我最近做了一個類似於此的項目,使用Canvas來佈置TextBlock s,Line s和Button s。這是高效和簡單的,比我預期的要多得多。

+0

看到像這樣的評論正是我所需要的。我沒有太多的WPF經驗,我主要使用Java編寫代碼.. ;-) – emesx 2012-03-26 16:48:29

+0

顯示如何在Canvas中間顯示10x10網格的代碼片段非常好看;-) – emesx 2012-03-26 16:50:48

0

如果UI很簡單並且您正在尋找編程的便利性,那麼您可以使用XAML,您可以使用VS或Blend中的XMAL內置設計器來繪製UI。其他選擇是使用DirectX或OpenGL,它功能強大但學習曲線陡峭。

+0

地圖不是靜態的 – emesx 2012-03-26 16:41:25

+0

即使地圖不是靜態的,也可以在XAML中創建結構並綁定Map的元素。 – 2012-03-26 16:44:33

+0

非常好的主意!不幸的是,大小不是靜態的。想象一下游戲中的世界地圖.. – emesx 2012-03-26 16:45:14