티스토리 뷰

스마트 폰을 잘 활용하지 못하시는 분에게는 스마트 폰이 그저 시계일 뿐이지요. 돈빨아먹는 시계..

그래서 저는 스마트폰이 없답니다 하핫!

아무튼 이번 포스팅에선 XNA와 silverlight로 간단한 시계를 출력하는 걸 해보고자 합니다.

silverlight로는 그냥 단순히 시간을 호출하는 함수를 삽입하면 됩니다.
일단 content panel은 전시간에 했던 예제를 인용해보겠습니다.
 


그리고 이제 MainPage.xaml.cs를 조금 정리해줘야 합니다.
우리는 실제 시간을 불러와야 하므로 그걸 관장하는 네임스페이스를 삽입해줘야 합니다. 책에서는 
DispatcherTimer를 정의하는 System.Windows.Threading을 삽입해줘야 한다고 언급합니다.
다음과 같이 삽입해줍니다.

 
타이머를 불러오고 매초에 한번씩 OnTimerTick 메서드를 불러오는 거지요. 그리고 이렇게 얻어온 값을 아까 MainPage.xaml에서 만들었던 txtblk에 다시 넣어주는 거고요.

결과는 이와같이 가운데에

  현재 시각이 뜨는 것을 확인할 수 있습니다. 물론 SupportOrientation에서 PortraitOrLandscape를 지정해놓으면 Landscape 모드에도 시간이 보이는 걸 확인할 수 있겠지요. 실버라이트에서는 이렇게 직접적으로 타이머 함수를 불러와서 매초마다 호출하는 형식으로 시각을 구현했습니다.

그럼 XNA에서는 어떻게 구현할까요?
아무래도 구성되는 방식이 실버라이트와 조금 틀릴겁니다. XNA가 화면을 출력하는 건 맨처음에 언급한 적도 있지만 글자 하나하나도 비트맵이라고 했었지요. 이런게 매 순간 그려집니다. 
대충 감이 잡히시나요? 즉 타이머가 필요없는 겁니다. 매 순간 그려지는 거 자체가 타이머 역할을 하는거지요. 다만 이 순간을 1초로 미리 설정해놓는다면 시간 알림의 역할을 수행할 수 있겠네요.

일단 XNA로 프로젝트를 생성한후 public 클래스에서는 다음과 같이 설정합니다.


일단 새롭게 추가한 자료형이 StringBuilder와 DateTime 인데 StringBuilder는 자료 구조적인 측면에서 쓰인 자료형이라고 보면 되겠습니다. 저도 잘은 모르겠지만 이 것을 씀으로써 자료 이동의 효율성을 증대시킨다고 합니다. 참고로 이 자료형을 쓰기위해서는 그림에서 처럼System.Text라는 네임스페이스를 삽입해줘야합니다. DateTime 자료형은 이름에서도 알수 있다시피 날짜와 시간을 관장하는 거겠지요..

일단 LoadContent 메서드에 다음과 같이 폰트와 화면의 viewport를 가져옵니다.


매번 나오는 함수라서 시간이 갈수록 익숙해져갈겁니다.

자 이제 Update를 어떻게 하느냐를 컨트롤해줘야되겠네요. 다음과 같이 코드를 입력합니다.


전반적인 개요는 다음과 같습니다.
일단 1msec 단위로 dateTime을 뽑습니다. 그래서 최근시간과 비교해서 다르면 그 텍스트의 사이즈와 크기 폭을 다시 계산하고 새로운 문자열에 삽입합니다. 반면 같다면 바꿀필요가 없기 때문에 suppressDraw()를 써서 현 상태를 유지하게 하는 것입니다.
결론적으로 최근시각과 다른 경우는 1초일때의 경우이므로 이런 update 메서드는 1초에 한번씩 동작하게 되는 것입니다.

마지막으로 화면에 출력시킬 것에 대한 설정을 해줍니다.

맨날 반복되는 구문이네요. 결과는 다음과 같습니다.


 자 지금시각 자정을 넘겼습니다. 하다보니 시간도 참 빨리가는 것 같습니다.
그래도 이렇게 예제를 하나씩 해보면서 재미도 느끼는 것 같습니다. 뭔가 저도 이렇게 써 나가면서 손에 익어나가는 점도 있기도 하고요.

다음 포스팅에선 이미지 불러오는 것에 대해서 언급하고자 합니다. 

댓글