티스토리 뷰

WindowsPhone

XNA를 활용한 WP7 앱 개발 - 화면 전환

생각많은 소심남 2011. 11. 2. 01:52

사실 윈도우폰7 에서 기본적으로 게임에 지정된 모드는 Landscape 모드입니다.
물론 그렇다고 Portrait을 지원하지 않는게 아니라 이를 위해서는 조금 수정이 될 부분이 존재한다는 거지요. 일단 XnaOrientableHelloPhone이라는 이름으로 프로젝트를 생성합니다.

이제 backbuffer라는 것에 대해서 설명해야 될듯합니다. 제가 책을 읽고 이해한 바로는 폰의 배경에 아무거나 표현할 수 있는 도화지라고 생각됩니다. 일단 이렇게 벡버퍼를 설정해두면 원하는 출력은 다 이 내부에서 표현이 되게 되는 것이지요. 그런데 이것을 잘 못사용하면 게임은 세로모드인데 출력은 가로모드처럼 되는 경우가 발생합니다. 물론 이같은 경우에는 위아래에 검정색으로 여백이 남겠지요. 화면 해상도도 덩달아서 떨어지기도 하고요. 이때문에 작은 백버퍼를 사용하는 것도 고려해야 됩니다. 작게는 240x240에서 크게는 800x480까지 인지한다고 되어 있네요. XNA 자체에서는 가로가 길면 가로보기로, 세로가 길면 세로보기로 자동으로 지정해줍니다. 그래서 이렇게 미리 지정해놓으면 특정크기에만 출력이 되기 때문에 혹시 모를 다른 크기의 디바이스에 대응하기도 쉽다는 장점이 있습니다.

일단 game1 class에 textSize 변수를 삽입합니다.

참고로 이전에 했던 XnaHelloPhone에서 따온겁니다.
그후에 game1 하위에 supportedOrientation을 초기화시켜주는 코드를 삽입합니다.


위와 같이 하면 결과적으로 SupportedOrientation은 모든 경우에 대해서 적용이 되는 것이겠지요. 그런데 사실 이 경우도 조금 생각해볼 점이 있습니다. 방향이 전환되면서 백버퍼의 값이
가로세로값이 변화하게 되는데 그럼 문장 위치를 그때그때 바꿔줘야 하냐에 대한 고민이 필요가 있습니다.

책에서는 문자열의 크기를 이용해서 위치를 정하는 방식을 소개했습니다.
 다음과 같이 코딩이 진행됩니다.

텍스트의 크기를 입력한 텍스트로부터 받아서 필드에 저장하고 있네요.


viewport를 통해서 가로세로 크기를 받아 화면의 방향을 결정하기 때문에 update 메소드안에 포함되어 있어야 합니다. Vector2 내부의 수식은 앞에서 보신거와 같이 가운데로 몰아주는 식입니다.


draw 함수는 앞에서 한 프로젝트와 같습니다. 단순히 어떤 font로 text를 출력하고 글자색을 어떻게 할건지 결정해준겁니다.
이제 끝입니다. 결과를 한번 볼까요?

참참 이에 앞서서 segoe14폰트가 삽입되어있는지 확인해보세요. 기억이 안나신다면 이전 xna관련 포스팅을 확인해보세요.


사진과 같이 정상적으로 Portrait 모드에서 풀화면이 출력되는 걸 확인할 수 있고,
landscape 모드에서도

시스템 상태창을 제외한 부분에서 똑같은 해상도로 나타나고 있습니다.
참고로 이전 silverlight에서도 언급했다시피 위의 시스템 상태창을 줄이기 위해선 game1.cs안에 다음과 같이

전체화면상에서 동작하게끔 하면 됩니다. 결과는 다음과 같이

나옵니다.

명심하셔야 할건. 꼭 graphic.IsFullScreen = true를 graphics정의 뒤에 삽입해줘야 합니다.
저것때문에 몇분을 허비한건지... 역시 배워야 산다는 말이 맞는말이네요.
책에는 그냥 삽입하면 된다고 해서 그대로 했다가 오류를 먹었네요 ㅠ

아무튼 여기까지 xna를 활용한 화면 전환이었습니다.
다음 포스팅은 아마 시계를 만드는 것부터 시작될 듯합니다.

 

댓글