WPF“六边形网格”组件

3

想要进入WPF自定义控件的世界,不知道设计HexGrid控件的最佳方法是什么?可以想象你最喜欢的桌面战争游戏;或者同样可能是你最喜欢的电子游戏,它从引以为傲的桌面战争游戏中窃取了设计。

底层模型作为Map类的一部分,公开了一个重要的方法:

Hex GetHex(int x, int y, int z)*;

十六进制包含所有相关数据(目前,一个地形枚举,与背景颜色一一对应;从小开始...)。

可能相关的限制:
地图大小不会改变,十六进制数据在非常可预测的时间内更改(始终直接响应用户操作)。

理想情况下,组件将扩展以清洁地填充其容器,并可以直接在XAML中声明。

我正在寻找的是大致的轮廓,以便我知道该如何构建它,而不是现成的组件。

*我认为我使用这种寻址方案非常聪明,但显然我来晚了。(链接)

2个回答

7
在我看来,在WPF中,将HexGrid设计为Panel而非UserControl更为合理。面板没有视觉表示,只需适当排列子元素(在HexGrid的情况下是呈蜂窝状)。这些子元素应该具有六边形形状。
一个概念证明:我的HexGrid项目(太大无法在此发布) CodeProject文章 GitHub存储库 HexList:选择器ItemsControl,它在HexGrid面板上显示HexItem容器中的项目 HexGrid:面板,它以蜂窝状排列子元素 HexItem:六边形形状的ContentControl
声明使用示例:
<hx:HexList Name="HexColors" Orientation="Vertical"
            Grid.Row="1"
            Padding="10"
            SelectedIndex="0"
            Background="{Binding Path=SelectedItem.Background, RelativeSource={RelativeSource Self}}"
            RowCount="5" ColumnCount="5">
    <hx:HexItem Grid.Row="0" Grid.Column="1" Background="#006699"/>
    <hx:HexItem Grid.Row="0" Grid.Column="2" Background="#0033CC"/>
    <hx:HexItem Grid.Row="0" Grid.Column="3" Background="#3333FF"/>
    <!--...-->
    <hx:HexItem Grid.Row="4" Grid.Column="1" Background="#CC9900"/>
    <hx:HexItem Grid.Row="4" Grid.Column="2" Background="#FF3300"/>
    <hx:HexItem Grid.Row="4" Grid.Column="3" Background="#CC0000"/>
</hx:HexList>

hex color selector

我知道这个问题已经很老了,但为了分享我的解决方案,我还是想提供一下。

1

编辑:这里是Pete的项目页面链接,其中包含一个六边形网格示例。 http://blois.us/Projects.html 有一个路径查找示例展示了一个名为路径查找的项目,它具有六边形网格,并且可能使用与扫雷相同的基本代码。我还没有看过它。它是Silverlight 3,因此可能需要升级。扫雷非常优雅。

Ralph

原文: Peter Blois提供了一个银光2的示例,展示了扫雷的六边形版本。

它包括源代码。他有一种非常优雅的方法来通过覆盖网格上的measureoverride和arrangeoverride来实现。鼠标悬停等都可以正常工作。代码非常少。
我无法在网络上找到该项目,尽管通过搜索hexagon minesweeper silverlight source code blois在Google上可以找到一个陈旧的链接。

Peter Blois在下面的地址有一个当前的博客,所以您可以尝试在这里联系他... http://blois.us/Projects.html

祝你好运,告诉我进展如何,我也要做类似的事情。

1
不幸的是,这些链接返回了“404”错误。现在这个答案基本上没有用了。 - IAbstract
尝试访问 https://web.archive.org/web/20141217013339/http://blois.us/,页脚中有他的电子邮件地址链接。 - Ralph Trickey
现在 SO.GameDevelopment 部分有另一个问题涉及此问题:http://gamedev.stackexchange.com/questions/2338/clickable-hex-grid-in-c-net - Anthony Nichols

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接