폰은 어떻게 자기 회전을 셀까
Looping에는 카메라도 심판도 필요 없어요. 폰이 자기 던지기를 직접 측정하니까요. 폰이 손을 떠나는 순간부터 점수가 뜰 때까지 무슨 일이 일어나는지 알려 드릴게요.
모든 폰에 들어 있는 센서 두 개
가속도계는 폰이 받는 힘을 측정해요. 테이블 위에 놓여 있을 때는 중력을 읽는데, 그 값이 약 9.8 m/s²예요. 자이로스코프는 폰이 세 축 각각을 중심으로 얼마나 빠르게 도는지를 측정해요. 단위는 초당 도(°/s)예요.
둘 다 원래는 화면을 돌리고, 걸음 수를 세고, 사진 흔들림을 잡으려고 폰에 들어간 센서예요. Looping은 브라우저를 통해 이 값을 1초에 수십 번 읽어요.
비행 알아채기
폰이 손을 떠나는 순간, 폰을 미는 힘은 더 이상 없어요. 올라갈 때든 내려올 때든 자유 낙하 상태라서 가속도계 값은 거의 0이 돼요. 이 갑작스러운 ‘고요함’이 비행의 표시예요. 그리고 손이나 매트리스가 폰을 멈추면 값이 날카롭게 치솟으면서 비행이 끝나요.
그런데 폰이 돌고 있으면 이야기가 복잡해져요. 가속도계가 폰의 정중앙에 있는 게 아니라서 회전 자체가 가속도계를 누르거든요. 그래서 게임은 단순한 0을 찾지 않아요. 가속도계가 읽은 값이 자이로스코프가 측정한 회전으로 정확히 설명되는지 확인해요. 손안에서 흔든 폰이나 테이블 위에서 팽이처럼 돌린 폰은 이 검사를 통과하지 못해요.
비행은 0.3초 이상 이어져야 인정돼요. 높이로 치면 약 11cm인데, 던지기와 손이 움찔한 것을 구분하기엔 충분해요.
바퀴 수 세기
비행하는 동안 자이로스코프는 회전 속도를 1초에 여러 번 알려 줘요. 값 하나하나에 그 값이 맡은 시간을 곱하고 전부 더하면, 폰이 돈 총 각도가 나와요. 어느 축으로 돌든 상관없어요. 동전처럼 앞뒤로 뒤집히든(플립), 긴 축을 중심으로 돌든(롤), 팽이처럼 평평하게 돌든(플랫 스핀)요.
1회전은 360°예요. 화면에 나오는 숫자는 완전히 돈 바퀴 수이고, 80% 이상 돌면 한 바퀴로 쳐요. 던지기를 지켜보는 사람 눈에는 자유 비행 중에 돈 것보다 5분의 1바퀴쯤 더 보여요. 폰은 손을 떠나기 전부터 이미 돌고 있고, 잡는 순간에도 아직 돌고 있으니까요. 반면 랭킹은 총 회전으로, 1도 단위까지 따져요.
높이는 어디서 나올까
게임은 천장을 보지 못해요. 대신 비행 시간을 재요. 위로 던져서 같은 높이에서 잡은 물체는 체공 시간의 절반은 올라가고 나머지 절반은 내려와요. 여기서 높이가 나와요. 공중에 0.5초면 약 30cm, 0.75초면 약 70cm, 1초면 약 1.2m예요.
어디까지나 추정값이에요. 던진 곳보다 낮은 데서 잡으면 숫자가 실제보다 조금 후하게 나와요.
센서가 따라가지 못할 때
모든 자이로스코프에는 상한이 있어요. 회전 속도가 그 선을 넘으면 계속 같은 숫자만 내놓아요. 저희가 측정해 보니 일부 Android 폰은 약 1,150 °/s, 다른 기종은 2,300 °/s, 최신 iPhone은 4,000 °/s였어요. 4,000 °/s면 1초에 11바퀴예요.
던지기가 상한을 넘어도 게임은 빠진 바퀴를 지어내지 않아요. 실제로 측정된 최솟값을 점수로 삼고 결과에 그 사실을 알려 주거나, 아무것도 보장할 수 없으면 던지기를 인정하지 않아요. 점수가 실제보다 낮을 수는 있어도, 높을 수는 없어요.
점수를 서버가 관리하는 이유
폰은 던지기를 기록할 뿐, 판정하지는 않아요. 원본 측정값은 게임 서버로 가고, 서버가 모두에게 똑같은 규칙으로 점수를 계산하면서 그 값이 진짜 자유 비행인지 확인해요. 기록 하나는 딱 한 번만 인정돼요.
랭킹을 믿을 수 있는 이유가 바로 이거예요. 누구도 숫자를 보낼 수는 없고, 던지기만 보낼 수 있으니까요. 네트워크가 없으면 던지기는 폰에 보관됐다가(최대 12개, 7일 동안) 연결이 돌아오면 집계돼요.
게임이 읽는 것과 읽지 않는 것
Looping은 모션 센서만 읽어요. 카메라도, 마이크도, 위치도 읽지 않아요. 무엇이 얼마 동안 기록되는지는 법적 고지에 적혀 있어요.
Looping 플레이더 알아보기
English Français Español Português Deutsch Italiano Nederlands Polski Türkçe Русский Українська العربية हिन्दी বাংলা Bahasa Indonesia Tiếng Việt ไทย 日本語 한국어 中文