WPF“六角网格”组件
-
06-07-2019 - |
题
进入 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项目(太大而无法在此发布)
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>
我明白这个问题是老人但是为了以防分享我的解决方案