WPF“ 16進グリッド”成分
-
06-07-2019 - |
質問
WPFカスタムコントロールの世界に飛び込んで、HexGridコントロールを設計する最良の方法は何だろうと思っていましたか?お気に入りの卓上戦争ゲームを考えてください。または、同様に、卓上戦争ゲームの誇り高い歴史からデザインを盗むお気に入りのビデオゲーム。
基礎となるモデルは、Mapクラスの一部として1つの重要なメソッドを公開します:
Hex GetHex(int x, int y, int z)*;
Hexには、関連するすべてのデータが含まれています(現時点では、背景色に1:1でマッピングされる地形の列挙。小さな開始...)。
関連する可能性のある制約:
マップのサイズは変わりません& 16進データは非常に予測可能な時間に変更されます(常にユーザーのアクションに直接応答します)。
理想的には、コンポーネントはコンテナをきれいに拡張してXAMLで直接宣言できます。
探しているのは、既製のコンポーネントではなく、これを構築するために必要なことの大まかな概要です。
*私はこのアドレッシング方式にかなり賢いのですが、どうやら lateですパーティーへ。
解決
編集:ここに、16進グリッドのサンプルがあるPeteのプロジェクトページへのリンクがあります。 http://blois.us/Projects.html Hex Gridを持ち、おそらく掃海艇と同じ基本コードを使用するpathfindingと呼ばれるプロジェクトを示すpathfindingサンプルがあります。私はまだ見ていません。これはSilverlight 3であるため、アップグレードする必要がある場合があります。掃海艇はかなりエレガントでした。
ラルフ
オリジナル: 掃海艇の六角形バージョンのピーターブロワによるsilverlight 2のサンプルがありました。
ソースコードが含まれていました。彼は、グリッド上のmeasureoverrideとArrangeoverrideをオーバーライドすることで、非常にエレガントな方法でそれを行いました。マウスオーバーなどはうまくいきました。著しく少ないコードがありました。
ウェブ上でプロジェクトを見つけることができませんが、googleには六角形の掃海艇silverlightソースコードブロアを検索することで古いリンクがあります
Peter Bloisの現在のブログは以下のアドレスにあるため、ここで彼に連絡してみてください。 http://blois.us/Projects.html
幸運とそれがどうなるか教えてください、私は似たようなものになります。
他のヒント
WPFでの私の意見では、HexGridをUserControlとしてではなく、 Panel
として設計する方が合理的です。パネルには視覚的な表現はなく、子要素を適切に配置するだけです(HexGridの場合-ハニカムパターン)。これらの子要素は、六角形にする必要があります。
概念の証明:私のHexGridプロジェクト(ここに投稿するには大きすぎます)
HexList :HexGridパネルのHexItemコンテナーにアイテムを表示するセレクターItemsControl
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>
質問は古いものであると理解していますが、万が一に備えて解決策を共有します