【问题标题】:Simplest way to draw a tile-map in WPF在 WPF 中绘制平铺地图的最简单方法
【发布时间】:2012-03-26 16:32:31
【问题描述】:

在我的“游戏”中,我将绘制一张小地图(即 10x10 的区域)。每个字段将代表一堵墙或地面。根据对这个问题的回答,图块将是 PNG 图像或简单的填充颜色的矩形。

您推荐的在 WPF 中绘制此类地图的最佳方法是什么?我希望它尽可能简单,因为这个项目的GUI部分不是很重要,我只是希望它显示在窗口的中心。

我的想法:

  • Canvas + 将多个 Rectangles 放置为子代
  • 引擎渲染的位图,GUI显示
  • 外部库?

【问题讨论】:

  • 您如何定义“最佳”?易于编程、性能、内存利用率、CPU...?
  • 易于编程是最重要的

标签: c# wpf


【解决方案1】:

WPF 不像 Windows 窗体那样倾向于 绘图。 WPF 更加面向内容。

“绘制”某些东西的最佳方式是从现有的 WPF 元素中生成地图。例如,您可以使用GridUniformGrid,甚至Canvas 来布置您的内容。您可以通过编程方式将Images 和Rectangles 添加到地图中,而无需担心任何绘图代码。

这是一个例子:

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 布局TextBlocks、Lines 和Buttons。它高效而简单,比我预期的要多得多。

【讨论】:

  • 看,像这样的cmets正是我需要的。我在 WPF 方面没有太多经验,我主要用 Java 编写代码.. ;-)
  • 一个显示如何绘制 10x10 网格的 sn-p 显示在 Canvas 的中间会很高兴看到 ;-)
【解决方案2】:

如果 UI 很简单并且您正在寻找易于编程的方式,我会说使用 XAML,您可以使用 VS 或 Blend 中的 XMAL 内置设计器来绘制 UI。其他选择是使用功能更强大但学习曲线陡峭的 DirectX 或 OpenGL。

【讨论】:

  • 即使地图不是静态的,您也可以在XAML中创建结构并绑定地图的元素。
  • 好主意!不幸的是,大小不是静态的。想象一下游戏中的世界地图……
  • 我以为你说的是​​ 10x10?您需要使用 DirectX 或 OpenGL 的其他选项,它们是 2D/3D 绘图环境,您必须从头开始绘制所有内容。如果需要,您可以动态生成 XAML 控件。
  • @elmes; “IE。” =“id est”=“也就是说”。如果您的意思是“例如”,请使用“例如”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多