进入 WPF 自定义控件的世界,想知道设计 HexGrid 控件的最佳方法是什么?想想你最喜欢的桌面战争游戏;或者,同样可能的是,您最喜欢的视频游戏借鉴了令人自豪的桌面战争游戏历史的设计。

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

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

Hex 包含所有相关数据(目前,Terrain 枚举将 1:1 映射到背景颜色;从小处开始...)。

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

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

我正在寻找的是构建此组件所需的粗略轮廓,而不是现成的组件。

*我虽然我对这个寻址方案非常聪明,但显然我是 聚会迟到.

有帮助吗?

解决方案

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

拉尔夫

原来的:Peter blois 提供了 silverlight 2 的六角版扫雷样本。

它包括源代码。他有一个非常优雅的方法,通过覆盖网格上的measureoverride和arrangeoverride来做到这一点。鼠标悬停等工作得很好。代码非常少。

我在网上找不到这个项目了,尽管谷歌通过搜索六边形扫雷银光源代码布洛斯有一个过时的链接

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

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

其他提示

在我看来,在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>

我明白这个问题是老人但是为了以防分享我的解决方案

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top