3.Acceleration

Edit

3.1Acceleration

Acceleration은 모바일 장치의 가속도 센서로부터 측정된 가속도 정보를 제공하는 오브젝트입니다. 여기서 가속도는 중력 가속도(Gravity)를 의미하며 지구의 중력 가속도를 기준으로 모바일 장치가 얼만큼의 힘을 받고 있는지를 측정한 값입니다.

가속도 정보는 x축, y축, z축의 세 값을 갖습니다. 이 값은 중력 가속도가 세 축에 작용하는 값을 측정한 것인데 이를 이용해 모바일 장치가 어느 방향으로 얼마나 기울어져 있는지를 감지할 수 있습니다. 가속도 정보는 모바일의 화면 회전 기능, 체감형 게임 등에서 널리 활용되고 있습니다.

3.2가속도 정보 구하기

가속도 정보는 Acceleration 오브젝트의 메소드를 호출하여 구할 수 있습니다. getCurrentAcceleration 메소드는 현재 시점의 가속도 정보를 측정합니다. 주기적으로 가속도 정보를 측정하려면 watchStart 메소드를 사용합니다. 메소드 수행이 성공하면 onrecvsuccess 이벤트가 발생하며 AccelerationEventInfo 오브젝트에서 x, y, z 축에 작용한 가속도 정보 값을 구할 수 있습니다.

3.2.1예제

다음은 모바일 장치의 가속도 정보를 구하는 예제입니다. Accuracy와 Interval Time을 설정한 후 Watch Start 버튼을 터치하면 Interval Time 간격으로 가속도 정보를 측정하여 표시해줍니다. Watch Stop 버튼을 터치하면 측정을 멈춥니다.

그림 3-1Screenshot_20180927-181035

3.2.2예제에서 사용한 핵심 기능

Acceleration > watchStart 메소드

모바일 장치의 가속도 정보를 일정 간격으로 수신하도록 설정하는 메소드입니다. 메소드 호출 시 Accuracy와 Interval Time 인수를 설정할 수 있는데 Interval Time 간격으로 Accuracy 정확도를 갖는 가속도 정보를 수신합니다. Accuracy는 0~3 범위의 정숫값을 Interval Time은 200~86,400,000ms 범위의 값을 가질 수 있습니다.

Acceleration > accuracy 속성

모바일 장치에서 측정한 가속도 정보의 정확도를 갖는 속성입니다. 0~3 범위의 정숫값을 가질 수 있는데 값이 작을수록 정확도가 높아집니다.

Acceleration > xpos 속성

x 축의 가속도 값을 갖는 속성입니다.

Acceleration > ypos 속성

y 축의 가속도 값을 갖는 속성입니다.

Acceleration > zpos 속성

z 축의 가속도 값을 갖는 속성입니다.

3.2.3예제 구현 방법

1

화면 구성하기

Acceleration 오브젝트를 추가합니다. 추가된 오브젝트는 Invisible Object 창에서 확인할 수 있습니다.

Accuracy와 Interval Time 값을 입력받기 위한 Static, Radio, Edit 컴포넌트를 추가하고 가속도 정보 측정을 수행하기 위한 Button 컴포넌트 두 개를 추가합니다. 그리고 측정된 가속도 정보를 화면에 표시하기 위한 GroupBox, Static, Edit 컴포넌트를 예제의 그림과 같이 적절히 배치합니다.

화면 구성을 위해 추가한 컴포넌트 및 오브젝트는 다음과 같습니다.

컴포넌트/오브젝트

ID

Static

Static00~Static07

Radio

rdo_accuracy

Edit

edt_intervaltime

edt_timestamp

edt_accuracy

edt_xpos

edt_ypos

edt_zpos

Button

btn_start

btn_stop

GroupBox

GroupBox00

2

Watch Start 버튼 이벤트 함수 작성하기

Watch Start 버튼의 onclick 이벤트 함수를 다음과 같이 작성합니다.

this.btn_start_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
    var nAccuracy = this.rdo_accuracy.text;    
    var nIntervalTime = this.edt_intervaltime.value;
    
    if(nIntervalTime < 200 || nIntervalTime > 86400000)
    {
        this.edt_intervaltime.setFocus();

        trace("Invalid range");
        return;
    }
    
    this.Acceleration00.watchStart(nAccuracy, nIntervalTime);
    
    this.btn_start.set_enable(false);
    this.btn_stop.set_enable(true);
};

3

Watch Stop 버튼 이벤트 함수 작성하기

Watch Stop 버튼의 onclick 이벤트 함수를 다음과 같이 작성합니다.

this.btn_stop_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
    this.Acceleration00.watchStop();
    
    this.btn_start.set_enable(true);
    this.btn_stop.set_enable(false);    
};

4

Acceleration 이벤트 함수 작성하기

가속도 정보 수신에 성공하면 onrecvsuccess 이벤트를, 실패하면 onrecverror 이벤트가 발생합니다.

가속도 정보 수신에 성공하면 onrecvsuccess 이벤트가 발생합니다. AccelerationEventInfo로부터 timestamp, accuracy, xpos, ypos, zpos 값을 얻을 수 있습니다.

this.Acceleration00_onrecvsuccess = function(obj:nexacro.Acceleration,e:nexacro.AccelerationEventInfo)
{
    this.edt_timestamp.set_value(e.timestamp);
    this.edt_accuracy.set_value(e.accuracy);
    this.edt_xpos.set_value(e.xpos);
    this.edt_ypos.set_value(e.ypos);
    this.edt_zpos.set_value(e.zpos);
};

가속도 정보 수신에 실패하면 onrecverror 이벤트가 발생합니다. 어떤 이유로 에러가 발생했는지 에러 정보를 표시합니다.

this.Acceleration00_onrecverror = function(obj:nexacro.Acceleration,e:nexacro.AccelerationErrorEventInfo)
{
    var strResult = "["+ e.errortype +" "+ e.statuscode +"] "+ e.errormsg;    
    trace(strResult);    
};

5

모바일 장치에서 확인하기

accuracy와 interval time을 설정한 후 Watch Start 버튼을 터치합니다. 가속도 정보가 정상적으로 측정되면 하단의 Acceleration Information 그룹 박스의 timestamp, xpos, ypos, zpos 값이 interval time 주기로 갱신되어 보입니다. 가속도 정보 측정을 멈추려면 Watch Stop 버튼을 터치합니다.