WPF "шестигранная сетка" компонент
Окунувшись в мир пользовательских элементов управления WPF, вы задались вопросом, каким будет лучший способ разработки элемента управления HexGrid? Вспомните свою любимую настольную военную игру; или, что не менее вероятно, ваша любимая видеоигра, которая крадет дизайн из гордой истории настольных военных игр.
Базовая модель предоставляет один важный метод как часть класса Map:
Hex GetHex(int x, int y, int z)*;
Шестнадцатеричный содержит все соответствующие данные (на данный момент перечисление Terrain, которое отображает 1:1 в цвет фона; начиная с малого...).
Возможно соответствующие ограничения:
Карта не изменяется по размеру, а данные Hex изменяются в очень предсказуемые моменты времени (всегда в прямой реакции на действия пользователя).
В идеале компонент должен расширяться, чтобы полностью заполнить свой контейнер, и быть декларируемым непосредственно в XAML.
То, что я ищу, это схематичный план того, что мне нужно сделать, чтобы создать это, а не готовый компонент.
* Я хотя и был довольно умен с этой схемой адресации, но, видимо, я опоздал на вечеринку.
2 ответа
РЕДАКТИРОВАТЬ: Вот ссылка на страницу проекта Пита, которая имеет образец шестигранной сетки. http://blois.us/Projects.html Существует пример поиска пути, который показывает проект под названием pathfinding, который имеет шестнадцатеричную сетку и, вероятно, использует тот же базовый код, что и тральщик. Я еще не смотрел на это. Это Silverlight 3, поэтому, возможно, потребуется обновить. Сапер был довольно элегантным.
Ральф
ОРИГИНАЛ: Был образец для серебряного света 2 от Питера Блуа шестиугольной версии тральщика.
Это включало исходный код. У него был очень изящный способ сделать это, переопределив измерение переопределения и упорядочение по сетке. Мышки и т. Д. Работали нормально. Там было замечательно мало кода.
Я больше не могу найти проект в Интернете, хотя у Google есть устаревшая ссылка на него, ища исходный код шестиугольника тральщика silverlight blois
У Питера Блуа есть текущий блог по указанному ниже адресу, поэтому вы можете попробовать связаться с ним здесь... http://blois.us/Projects.html
Удачи и скажите мне, как это происходит, я собираюсь быть dong что-то подобное.
На мой взгляд, в WPF более разумно разработать HexGrid как Panel
а не как UserControl. Панели не имеют визуального представления и должны только правильно расположить дочерние элементы (в случае HexGrid - в виде сот). Эти дочерние элементы, в свою очередь, должны иметь шестиугольную форму.
Подтверждение концепции: мой проект HexGrid (слишком большой для размещения здесь)
HexList: селектор ItemsControl, который отображает элементы в контейнере HexItem на панели HexGrid
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>
Я понимаю, что вопрос старый, но поделюсь своим решением на всякий случай