2012-03-26 105 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