내비게이션 액션

01. 집으로 가기

재간둥이 알버트 로봇이 맘껏 뛰어 놀다가 집으로 돌아갈 시간이 되었다. 집으로 가면서 슈퍼마켓에도 들리도록 하자.

알버트 로봇을 주어진 위치로 이동시키는 프로그램을 작성하시오.

웹 페이지 만들기를 참고하여 안드로이드 프로젝트와 웹 페이지 파일을 만들고, 웹 페이지가 닫힐 때 호출되는 window.onunload 함수를 만들자.

 <script type="text/javascript">

 window.onunload = function()
 {
 }
 </script>

Navigation 액션의 객체를 얻기 위해서는 Action 객체의 obtain(actionId) 함수에서 actionId에 Action.Navigation.ID를 입력하면 된다.

 <script type="text/javascript">

 var action = Action.obtain(Action.Navigation.ID); // 액션 객체를 얻는다.
 action.activate(); // 액션을 시작한다.

 window.onunload = function()
 {
     action.deactivate(); // 액션을 중지한다.
     action.dispose(); // 액션을 폐기한다.
 }
 </script>

window.onunload 함수에서 액션을 중지 및 폐기하였지만 어디에서 해도 상관은 없다. 웹 페이지가 닫히기 전에 액션을 모두 폐기하여야 한다는 것만 잊지 않도록 하자.

내비게이션 패드 위에서 움직여야 하므로 사용하는 내비게이션 패드의 크기를 입력하도록 하자. Navigation 액션에는 패드 크기를 나타내는 디바이스로 COMMAND_PAD_SIZE가 있다. 여기서는 가로 108, 세로 76 크기의 패드를 사용하였다.

 <script type="text/javascript">

 var action = Action.obtain(Action.Navigation.ID);
 var padSizeDevice = action.findDeviceById(Action.Navigation.COMMAND_PAD_SIZE);
 padSizeDevice.writeAt(0, 108); // 가로 크기
 padSizeDevice.writeAt(1, 76); // 세로 크기
 action.activate();

 window.onunload = function()
 {
     action.deactivate();
     action.dispose();
 }
 </script>

Navigation 액션에는 이동할 위치를 쓰는 디바이스로 COMMAND_WAYPOINTS가 있다. 알버트 로봇이 이동하는 중간 경로와 마지막 위치를 나타내며, 입력하는 배열의 크기는 2의 배수이어야 한다. 홀수 번째 값은 X축 좌표, 짝수 번째 값은 Y축 좌표 값이며, 현재 위치에서 (80, 20)으로 이동한 후 다시 (90, 50)으로 이동하고자 한다면 배열 값을 [80, 20, 90, 50]으로 입력하면 된다.

또한, 마지막 위치에 도착한 후 알버트 로봇이 바라보는 방향을 쓰는 디바이스로 COMMAND_FINAL_ORIENTATION이 있다. -179도부터 180도까지의 값을 가질 수 있으며, 내비게이션 패드의 X축 방향이 0도이다.

 <script type="text/javascript">

 var action = Action.obtain(Action.Navigation.ID);
 var padSizeDevice = action.findDeviceById(Action.Navigation.COMMAND_PAD_SIZE);
 padSizeDevice.writeAt(0, 108);
 padSizeDevice.writeAt(1, 76);
 var waypointsDevice = action.findDeviceById(Action.Navigation.COMMAND_WAYPOINTS);
 var finalOrientationDevice = action.findDeviceById(Action.Navigation.COMMAND_FINAL_ORIENTATION);
 waypointsDevice.writeArray([ 80, 20, 90, 50 ]); // (80, 20)으로 이동한 후 (90, 50)으로 이동한다.
 finalOrientationDevice.write(-90); // 마지막 위치에 도착한 후 -90도 방향을 바라본다.
 action.activate();

 window.onunload = function()
 {
     action.deactivate();
     action.dispose();
 }
 </script>

집에 도착한 후에는 저녁 식사를 해야 하는데 이를 위해서는 집에 도착했다는 것을 알아야 한다. Navigation 액션은 내비게이션이 완료되었을 때 onActionCompleted(action) 콜백 함수가 호출된다.

 <script type="text/javascript">

 var action = Action.obtain(Action.Navigation.ID);
 var padSizeDevice = action.findDeviceById(Action.Navigation.COMMAND_PAD_SIZE);
 padSizeDevice.writeAt(0, 108);
 padSizeDevice.writeAt(1, 76);
 var waypointsDevice = action.findDeviceById(Action.Navigation.COMMAND_WAYPOINTS);
 var finalOrientationDevice = action.findDeviceById(Action.Navigation.COMMAND_FINAL_ORIENTATION);
 waypointsDevice.writeArray([ 80, 20, 90, 50 ]);
 finalOrientationDevice.write(-90);
 action.activate();

 function onActionCompleted(action)
 {
     // 액션이 완료되었다.
 }

 window.onunload = function()
 {
     action.deactivate();
     action.dispose();
 }
 </script>