안녕하십니까? 너만바라보면 입니다.

저번시간에 배웠던 내용을 잘 학습하셨는지요? 이제 강의도 절반을 넘어서고 있습니다. 그동안 도움이 많이 되셨는지 궁금합니다. 중간고사라도 한번 볼까요? ^^ 여러분들이 알아서 잘 하셨으리라 생각합니다.

우선 저번시간 냈던 숙제에 대한 답을 말씀드려야 겠죠.

hw1.PNG

메시지만 잘 읽어보셨더라도 답을 아셨을 것입니다. 빙맵에 부여된 키를 제대로 입력하지 않으면 저와 같은 메시지가 나타나게 되죠. 키값을 제대로 입력하셔야 합니다.

 

이번시간에는 윈도우폰 가속계를 이용하여 3차원 공간 내에서 발생하는 윈도우폰의 움직임을 감지하여 애플리케이션에 반영하는 작업을 해보도록 하겠습니다. 우리가 이번시간에 만들 프로젝트는 가속도계에서 읽은 값을 사용해서 2D공간 내에서 공모양의 이미지를 움직이는 것을 만들어 볼 것입니다.

가속도계는 공간상에서 기기의 움직임을 측정하는데요. 좀 더 자세히 말하자면 지면에 수직으로 작용하는 지구의 중력에 대해서 폰의 가속도를 x,y,z 축 세 방향으로 나눠서 측정합니다.

 

0.png

 

위의 그림이 바로 폰이 사용자를 향하게 들었을 때 가속도계의 축방향을 나타냅니다. 윈도우폰의 화면이 사용자를 향하게 들었을 때 사용자를 향하는 쪽이 z축 양의 방향이고 폰의 아래쪽의 y축 음의 방향, 폰의 오른쪽이 x축 양의 방향인 3차원 그래프상에 놓였다고 보시면 됩니다.

윈도우폰 가속도계를 사용하려면 Microsoft.Devices.Sensors 네임스페이스를 참조해야 합니다. 또한 주의할 점이 있는데요. 가속도계를 사용하면 폰의 전력이 많이 소비되므로 필요할때만 불러오고 Off 시켜야 합니다.

윈도우폰이던 안드로이드,아이폰 상관없이 어플리케이션에서 가장 크게 고려해야할 부분은 바로 전력 소비 문제입니다. 아무리 훌륭한 어플리케이션이라 하더라도 전력을 많이 소비하여 배터리가 금방 달아버린다면 사용자가 쓰기에 불편할 것입니다. 그래서 가속도계를 사용하는 어플리케이션의 경우 특히 개발시 이 기능을 사용시 최소한의 점유를 가져가도록 노력해야 합니다.

우리는 이 가속도계에 대한 내용을 실제적으로 익혀보기 위한 학습을 하기 때문에 그렇게 전력소비가 많이 되지 않을 것입니다. (중요한건 결국 우리는 윈도우폰에서 이것을 실제적으로 돌려보지 못한다는 점이죠!)

이제 시작해 보겠습니다. 원래는 가속도계의 데이터를 가져오는 예제를 만들어 봐야 하나 실제적으로 가속도계를 어플리케이션에서 적용할때는 데이터를 직접 가져오는 것이 아닌 가속도계 값을 사용해서 이를 토대로 UI에 반영하는 방법을 많이 사용하기 때문에 이것과 연관된 예제를 실습해 보도록 하겠습니다. 앞에서도 말씀드렸다 시피 가속도계에서 읽은 값을 사용해서 2D공간 내에서 공모양의 이미지를 움직이는 것을 만들어 볼 것입니다

 

1.PNG

위의 화면과 같이 새로운 프로젝트를 생성합니다. Accelerometer 라고 프로젝트 Name을 정하겠습니다.

 

 

2.PNG

우선 Accelerometer를 이용하기 위해 Add Reference에서 Microsoft.Devices.Sensors를 추가합니다.

 

3.PNG

위와 같이 References를 추가하시면 됩니다.

 

4.PNG

우리가 만들 실습예제의 화면입니다. 디자인 하는데 참고하시기 바랍니다. 사실 그냥 제가 드리는 xaml코드로 작성하시는게 더 편하실수도 있습니다. 속도면에서 빠르거든요.

 

5.PNG

위의 화면과 같이 네임스페이스를 설정합니다.체크 표시된 네임스페이스를 작성해주세요.

6.PNG

가속도계를 시작,중단하는 버튼, 공 이미지 등을 만들어 봅시다. 공 이미지는 이미지 파일이 아닌 Canvas를 먼저 만든 뒤 Ellipse 컨트롤을 이용하면 됩니다.

7.PNG

이제 MainPage.xaml.cs를 활용해 보겠습니다.

 

8.PNG

위와같이 네임스페이스를 지정해 주시는데요.  중요한건 Microsoft.Devices.Sensors를 추가해야 합니다. 그래야 가속도계를 시작하고 중지할 수 있지요.

 

9.PNG

_ac 변수는 가속도계를 시작,중단하고 x,y,z값을 얻는데 쓰입니다.

 

 

10.PNG

그렇다면 위에서 _ac 변수가 가져온 가속도계 데이터를 어떻게 처리해야 할까요? 우선 가속도계 데이터는 UI 스레드 쪽이 아닌 별도의 스레드에서 가져오기 때문에 가속도계 데이터를 받아서 UI를 변경하는 것은 불가능 합니다.  그런데 우리는 가속도계 데이터 값을 받아서 이 값을 통해 화면에 보이는 공의 위치를 변경시켜야 합니다. 그러기 위해서는 Dispatcher를 사용해야 합니다.

 

 

 11.PNG

위 화면은 가속도계 데이터를 공에 적용하는 과정입니다. 폰의 화면이 사용자를 향한 방향으로 든다면 어떻게 될까요? 원래 폰이 평면에 딱 누워있다면 공은 움직이지 않을 것입니다.위의 소스는 폰의 화면이 사용자를 향하게 세로로 똑바로 들 경우 수직으로 낙하하는 동작을 만들어 본 것입니다.

 

12.PNG 

시작,멈춤 버튼의 이벤트를 추가합니다. 위의 버튼은 가속도계를 시작 및 중지하는 버튼입니다.

 

13.PNG

위의 화면과 같이 실행되었습니다. 에뮬레이터에서 가속도계를 쓰실려면 에뮬레이터 오른쪽에 ‘>>’ 버튼을 누르면 됩니다.

 

이번시간에는 가속도계에 대해서 알아보았습니다.  사실 가속도계에 대한 내용은 정말 방대합니다만 이 정도로 내용을 축약한 것은 스크롤의 압박(일명 스압!)도 있고 가속도계의 원리와 유클라드 식등을 이용해 직접 계산하는 것은 의미없다고 생각했기 때문입니다.

 

이번시간도 정말 수고많으셨습니다. 다음시간에 뵙겠습니다.




안녕하세요.윈도우폰에 관심이 많은 너만바라보면 입니다.