빠른 시작: 가속도계를 사용한 사용자 동작에 대한 응답(HTML)

[ 이 문서는 Windows 런타임 앱을 작성하는 Windows에서 8.x 및 Windows Phone 8.x 개발자를 대상으로 합니다. Windows 10용으로 개발하는 경우에는 최신 설명서를 참조하세요.]

가속도계를 사용하면 JavaScript로 작성된 앱에서 사용자의 동작에 응답할 수 있습니다. 가속도계를 기반으로 하는 앱은 일반적으로 입력에 하나 또는 두 개의 축만 사용합니다. 하지만 다른 입력 소스로 흔들기 이벤트를 사용할 수도 있습니다.

목표: 이 빠른 시작 문서를 완료하면 가속도계를 사용하여 동작 변화를 탐지하는 방법을 이해하게 됩니다.

사전 요구 사항

HTML, JavaScript 및 이벤트에 대해 익숙해야 합니다.

사용하는 장치 또는 에뮬레이터가 가속도계를 지원해야 합니다.

완료 시간: 15 분.

지침

1. Microsoft Visual Studio 열기

Visual Studio의 인스턴스를 엽니다.

2. 새 프로젝트 만들기

JavaScript/스토어 앱 프로젝트 유형에서 빈 앱을 선택하여 새 프로젝트를 만듭니다.

3. JavaScript 코드 바꾸기

프로젝트의 default.js 파일을 열고 기존 코드를 다음 코드로 바꿉니다.

// For an introduction to the Blank template, see the following documentation:
// https://go.microsoft.com/fwlink/p/?linkid=232509
(function () {
    "use strict";
    var accelerometer;

    var app = WinJS.Application;

    // This function responds to all app activations.
    app.onactivated = function (eventObject) {
        if (eventObject.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {
            if (accelerometer == null) {
                accelerometer = Windows.Devices.Sensors.Accelerometer.getDefault();

                // Establish the report interval
                var minimumReportInterval = accelerometer.minimumReportInterval;
                var reportInterval = minimumReportInterval > 16 ? minimumReportInterval : 16;
                accelerometer.reportInterval = reportInterval;

                // Establish the event handler
                accelerometer.addEventListener("readingchanged", onDataChanged);
            }
            WinJS.UI.processAll();
        }
    };

    // This function is called each time an accelerometer event
    // is fired by the driver.
    function onDataChanged(e) {
        var reading = e.reading;
        var accelX = reading.accelerationX;
        var accelY = reading.accelerationY;
        var accelZ = reading.accelerationZ;

        id('eventOutputX').innerHTML = accelX.toFixed(2);
        id('eventOutputY').innerHTML = accelY.toFixed(2);
        id('eventOutputZ').innerHTML = accelZ.toFixed(2);
    }

    // This function is invoked within onDataChanged to
    // retrieve the given identifier from the HTML document.
    function id(elementId) {
        return document.getElementById(elementId);
    }

    app.start();
})();

4. 앱에 대한 HTML 추가

Windows 및 Windows Phone 프로젝트에 대한 default.html 파일을 열고 다음 HTML을 파일의 BODY 태그 내부에 복사합니다.


    <div class="item" id="scenarioOutput">
    X: <a id="eventOutputX">no data</a>
    <br />
    Y: <a id="eventOutputY">no data</a>
    <br />
    Z: <a id="eventOutputZ">no data</a>
    <br />
    </div>

5. 앱 빌드, 배포 및 실행

F5 키를 누르거나 디버그 > 디버깅 시작을 선택하여 앱을 빌드, 배포 및 실행합니다.

앱이 실행 중이면 장치를 이동하거나 에뮬레이터 도구를 사용하여 가속도계 값을 변경할 수 있습니다.

6. 앱 중지

  1. Alt+Tab을 눌러 Visual Studio로 전환합니다.
  2. Shift+F5를 누르거나 디버그 > 디버깅 중지를 선택하여 앱을 중지합니다.

요약 및 다음 단계

앞의 예는 앱에서 가속도계 입력을 통합하기 위해 작성해야 하는 코드의 양이 얼마나 작은지를 보여줍니다.

앱은 onactivated 함수에서 기본 가속도계와 연결합니다. 이는 다음 행에서 수행됩니다.

accelerometer = Windows.Devices.Sensors.Accelerometer.getDefault();

새 가속도계 데이터는 onDataChanged 함수에서 캡처됩니다. 센서 드라이버는 센서에서 새 데이터를 받을 때마다 이 함수(또는 이벤트 처리기)를 사용하여 이 값을 앱에 전달합니다. 앱은 다음 행에서 이 이벤트 처리기를 등록합니다.

accelerometer.addEventListener("readingchanged", onDataChanged);

이 새로운 값은 아래 표시된 DOM 요소로의 업데이트를 통해 화면에 쓰입니다.

    <div class="item" id="scenarioOutput">
    X: <a id="eventOutputX">no data</a>
    <br />
    Y: <a id="eventOutputY">no data</a>
    <br />
    Z: <a id="eventOutputZ">no data</a>
    <br />
    </div>

앱은 onactivated 함수 내에서 보고 간격을 설정합니다. 이 코드는 장치에서 지원되는 최소 간격을 검색하여 요청된 16밀리초 간격(약 60Hz 새로 고침 빈도)과 비교합니다. 지원되는 최소 간격이 요청된 간격보다 큰 경우 코드는 값을 최소값으로 설정합니다. 그렇지 않으면 값을 요청된 간격으로 설정합니다.

var minimumReportInterval = accelerometer.minimumReportInterval;
var reportInterval = minimumReportInterval > 16 ? minimumReportInterval : 16;
accelerometer.reportInterval = reportInterval;

단순 앱을 작성하는 경우 다음 단계에서는 일반적으로 가속도계 입력을 그래픽 출력과 통합하는 작업을 수행하게 됩니다.

예를 들어 그래픽 디스플레이를 통해 사용자의 움직임을 보여 주는 만보계를 만들 수 있습니다.

관련 항목

Accelerometer class

가속도계 샘플