윈도우8 & WP Tip

[windows 8 RT] Reversi RT 개발 후기 Fool 평점: 없음 조회: 3331
첨부파일

 *** 본 내용은 본인이 오래전 훈스닷컴에 게시하였던 Reversi Game( http://hoons.kr/Board/mysilverlight/Content/22273 ) 을 Win RT 로 포팅한 것입니다.

*** 본 내용은 Windows 8 Pro 이상, Visual Studio Express for Windows 8 에서 컴파일 됩니다.

*** Windows 7 이하 쓰시는 분들은 VMWare 등에서 상기 환경 Setting 후 살펴 보십시오.

 

windows 8 RT 기본 개발법은 hoons 닷컴등에 잘 나와 있으므로 생략

 

본인은 어디까지나 Game 개발을 위한 환경을 살펴본다.

 

먼저 http://msdn.microsoft.com/ko-kr/library/windows/apps/xaml/br229571 내용을 꼼꼼히 살펴보자. 이번에는 사용자 입력 부분과 컨트롤(UI)부분을 확인할 필요가 있다.

 

 

터치 및 입력

  • MouseLeftButtonDown과 같은 마우스 관련 입력 이벤트가 없습니다. 이러한 이벤트는 터치 입력 관련 이벤트와 함께 Pointer 이벤트 아래에 통합됩니다. 대부분의 경우, 관련된 마우스 이벤트를 PointerPressed, PointerReleased, PointerEntered 또는 PointerExited로 변환할 수 있습니다. 자세한 내용은 사용자 조작에 반응을 참조하세요.
  • 특정 터치 조작은 속성을 사용하여 요소 단위로 활성화하거나 비활성화할 수 있습니다. 예를 들어 IsRightTapEnabled를 false로 설정할 수 있으며 해당 요소는 RightTapped 이벤트를 발생시키지 않습니다.
  • 키 이벤트에 대한 키는 PlatformKeyCode / Key 구분이 없습니다. 이벤트 데이터에서 보고된 키는 다른 열거를 사용합니다. VirtualKey와 다른 키 정보는 KeyStatus로 사용할 수 있습니다.
  • UIElement에서의 포인터 캡처는 여러 포인터를 캡처할 수 있습니다. 올바른 포인터 참조를 가져오려면 포인터 관련 이벤트의 이벤트 인수를 사용합니다.
  • Control.Focus 호출에서 포커스 동작이 프로그래밍 방식으로 실행되었음을 나타내는 열거형 값을 지정해야 합니다.

 

그리고 꽤나 애먹었던, 컨트롤(UI) 부분....

 

컨트롤

  • Metro 스타일 앱과 UI 정의에 XAML을 사용하는 다른 프레임워크에는 ButtonListBox 같은 동일한 기본 컨트롤과 Border, GridStackPanel 같은 기본 레이아웃 컨테이너가 있습니다. 그러나 Metro 스타일 앱에는 Silverlight의 Pivot 및 Panorama 컨트롤과 같이 "서명" 컨트롤이라고 부르는 기능이 없습니다. 대신 SemanticZoomFlipView 같은 컬렉션 준비 컨트롤이 있습니다. 또한 GridView는 이제 ListView에서 사용되는 구성 요소가 아닌 독립 실행형 컨트롤입니다. 자세한 내용은 기능별 컨트롤을 참조하세요.
  • 원 래 Silverlight 또는 WPF 앱에서 사용한 것과 동일한 컨트롤을 종종 사용할 수 있고 전체 UI를 해당 구성 요소로 이식하는 것이 가능할 수도 있지만, 이것이 항상 바람직한 방법은 아닙니다. 앱의 UI를 이식할 경우 특히 그러한데, 잠시 작업을 중단하고 Metro 스타일 앱 디자인 지침을 다시 검토할 수 있습니다. 예를 들면, 원래 앱과 앱의 UI에 있는 컨트롤은 처음부터 터치 방식으로 디자인되지 않았을 수 있지만, Metro 스타일 앱은 처음부터 터치 방식으로 디자인해야 합니다. 디자인에 대한 자세한 내용은 Metro 스타일 앱 디자인을 참조하세요. 컨트롤 관련 UX 지침에 대한 자세한 내용은 UX 지침 인덱스를 참조하세요.

 

휴.... 사용자 입력 부분은 그다지 어렵지 않게 적용하였으나, 이후 큰 난관에 봉착하였으니...

 

Windows.System.Threading namespace 에 Thread class 가 없다 !!! (http://msdn.microsoft.com/en-us/library/windows/apps/windows.system.threading.aspx)

 

게임 프로그래밍에서 여러가지 이유로 Thread를 쓰는데 !!!! (본 Reversi 게임에서는 컴퓨터의 Best Turn 계산시 멈춤 방지를 위해 Thread를 이용하였었다) 자 이제부터 고전적인 Programming Model을 탈피하여야 할 상황이다.

 

관련 사항 검색과 Design 가이드를 검토한 결과 사실, .Net 4 에서부터 적극 도입(되었지만 잘 안쓰고 있던)된 parallelism constructs를 고민해야 한다. 더 이상, 선택사항이 아닌 필수 사항으로서...

 

일 단 이문제를 해결하기 위해서 ThreadPool class를 사용할 수도 있지만(http://msdn.microsoft.com/ko-kr/library/windows/apps/xaml /hh465290.aspx) 본인은 기본적인 Async/Await 모델을 이용하여 이 문제를 (일단은, 약간 부자연스러운 상황이 종종 있음) 해결하였다.

 

Async/Await 모델을 적용한 또 다른 이유는... 저기 언급된... "Silverlight 또는 WPF 앱에서 사용한 것과 동일한 컨트롤을 종종 사용할 수 있고 전체 UI를 해당 구성 요소로 이식하는 것이 가능할 수도 있지만, 이것이 항상 바람약직한 방법은 아닙니다" 부분인데, 게임 우측에 돌이 놓여지는 History를 표시하는 UI에서 항상 아래쪽으로 Scroll을 유지하기 위해서 ListView.ScrollIntoView() 를 사용해야 하는데 이것 또한  Async/Await 모델을 이용하여야 제대로 반영이 된다.

 

이렇고 저렇고 해서 일단은 완료된 Reversi RT...

 

 

2% 부족하지만 진행하면서 Windows 8 RT, XAML 모델에서 게임 게발시 고려사항들을 나름 정리할수 있었다.

 

Source Code를 첨부하였으니 보시고 좀저 낳은 Model로 수정해 보거나 게임 개발에 참고하길 바란다.

태그 : 8 Game RT Windows
작성자 정보
Fool
Level 14
 [EXP.13/40]

메일:  비공개
글등록 +12 156 덧글등록 +3 26
자기소개
無明
글 공유하기 |
  tweet facebook
2012-10-06 오후 12:35:54
나도한마디
태그로 엮인글
[C#.NET Q&A] 어셈블리랑 디스어셈블리가 무엇인지요???  Tube
[자유게시판] 궁금해요[1]  Tube
[구인&교육정보] [구인] 트램폴린에서 WPF 개발자를 구합니다 (2개월)  락참치
[구인&교육정보] C#.NET고급개발자 모십니다.  장자방
[WPF Q&A] 저기 TabControl 좀 여쭤볼게요..[3]+1  독고다이
[WPF Q&A] 오라클 sql 날릴때 인코딩 질문이요...[1]  독고다이
[정보공유] Windows Server 2016 Technical Preview 3  컴포지트
[WPF Q&A] MultiBinding에대해서 한번만더 질문드립니다.[1]  독고다이
[윈도우8 & WP 질문/답변] 데스크탑 프로그램과 window 8 app간에 통신이 가능할까요?[1]  김형욱
[WPF Q&A] windows 8 app과 데스크탑 wpf 프로그램간 통신이 가능할까요?  김형욱