2009-06-18 5 views
3

WPF 사용자 지정 컨트롤의 세계로 뛰어 들어 HexGrid 컨트롤을 디자인하는 가장 좋은 방법은 무엇일까요? 좋아하는 테이블 탑 전쟁 게임을 생각해보십시오. 테이블 톱 전쟁 게임의 자랑스러운 역사에서 디자인을 훔치는 가장 좋아하는 비디오 게임입니다.WPF "hex grid"구성 요소

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

진수는 순간, 한 매핑하는 지형 열거 모든 관련 데이터 (포함 :

기본이되는 모델은지도 클래스의 일부로서, 하나의 중요한 방법을 노출하는 배경 색상에 1; 작은 시작 ...).

아마도 관련 제약 :
지도의 크기는 변하지 않습니다. & 16 진수 데이터는 매우 예측 가능한 시간에 변경됩니다 (항상 사용자 동작에 직접 응답).

이상적으로 해당 구성 요소는 해당 컨테이너를 깨끗하게 채우기 위해 확장되며 XAML에서 직접 선언 할 수 있습니다.

내가 찾고있는 것은 준비가 완료된 구성 요소가 아니라 빌드하기 위해해야 ​​할 일의 대략적인 개요입니다.

*이 주소 지정 체계에서 꽤 영리했지만, 분명히 나는 ​​late to the party입니다.

답변

1

편집 : 다음은 헥스 그리드 샘플이있는 Pete의 프로젝트 페이지에 대한 링크입니다. http://blois.us/Projects.html 진로 격자가있는 pathfinding이라는 프로젝트를 보여주는 길 찾기 샘플이 있으며, 아마도 지뢰 찾기와 동일한 기본 코드를 사용합니다. 나는 아직 그것을 보지 않았다. Silverlight 3이므로 업그레이드해야 할 수 있습니다. 지뢰 찾기는 꽤 우아했습니다.

랄프

ORIGINAL : 지뢰 찾기의 육각형 버전의 피터 블루 아에 의해 실버 2에 대한 샘플이 있었다.

소스 코드가 포함되어 있습니다. 그는 눈금에 measureoverride와 arrangeoverride를 무시함으로써 매우 우아한 방법을 가졌습니다. 마우스 오버 등이 정상적으로 작동했습니다. 현저하게 작은 코드가있었습니다.

구글 육각 지뢰 찾기 실버 소스 코드를 검색하여 그것에 오래된 링크가 있지만 나는 웹 더 이상에서 프로젝트를 찾을 수 없습니다 때문에,

피터 블루 아은 아래의 주소에서 현재 블로그를 가지고 블루 아 여기에 연락을 시도해보십시오 ... http://blois.us/Projects.html

행운을 빌어 요 어떻게 될지 말해 주시고 저는 비슷한 동성이 될 것입니다.

+1

불행히도 링크는'404'로 응답하고 있습니다. 이 대답은 현재 기본적으로 쓸모가 없습니다. – IAbstract

+0

https://web.archive.org/web/20141217013339/http://blois.us/ 바닥 글이 자신의 이메일 주소와 비슷합니다 –

+0

SO.GameDevelopment 섹션에이 문제를 해결하는 또 다른 질문이 있습니다. http://gamedev.stackexchange.com/questions/2338/clickable-hex-grid-in-c-net –

0

WPF에서는 UserControl이 아닌 Panel으로 HexGrid를 설계하는 것이 더 합리적입니다. 패널에는 시각적 표현이 없으며 자식 요소를 올바르게 정렬해야합니다 (HexGrid의 경우 - 벌집 패턴). 그 자식 요소는 차례로 6 각형이어야합니다.

개념의 증거 : (여기에 게시 할 너무 큰) 내 HexGrid 프로젝트

CodeProject article

GitHub repository

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> 

hex color selector

내가 질문 명곡 것을 이해하지만, 그냥 내 솔루션을 공유 경우